diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh
index 6208723..a888cae 100755
--- a/.gitlab-ci/test-lc-compliance.sh
+++ b/.gitlab-ci/test-lc-compliance.sh
@@ -14,7 +14,7 @@ libcamera_compliance() {
 		--verbose \
 		--skip-modules \
 		--force-9p \
-		--rwdir "$PWD/build" \
+		--rwdir "$PWD/build=$PWD/build" \
 		--run /opt/linux/bzImage \
 		--exec " \
 			set -x; \
@@ -25,12 +25,10 @@ libcamera_compliance() {
 			UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \
 			GTEST_OUTPUT=xml:./build/lc-compliance-report.xml \
 			lc-compliance -c Virtual0; \
-			echo \\\$? > ./build/.test-status; \
 		"

-	local status=$(cat build/.test-status)
+	local status=$?
 	echo "Test result exit state: $status"
-	rm build/.test-status

 	if [[ $status != 0 ]] ; then
 		exit $status
diff --git a/.gitlab-ci/test-libcamera-qemu.sh b/.gitlab-ci/test-libcamera-qemu.sh
index f9de5ab..03d39d3 100755
--- a/.gitlab-ci/test-libcamera-qemu.sh
+++ b/.gitlab-ci/test-libcamera-qemu.sh
@@ -24,13 +24,16 @@ libcamera_unit_test() {
 	echo "Running libcamera tests in a qemu VM"

 	virtme-ng --verbose --skip-modules --force-9p \
-		--rwdir "$PWD/build" \
+		--rwdir "$PWD/build=$PWD/build" \
 		--run /opt/linux/bzImage \
-		--exec "meson test -C build --no-rebuild --print-errorlogs; echo \\\$? > build/.test-status"
+		--exec " \
+			set -ex; \
+			mount -t tmpfs tmpfs /tmp/; \
+			meson test -C build --no-rebuild --print-errorlogs; \
+		"

-	local status=$(cat build/.test-status)
+	local status=$?
 	echo "Test result exit state: $status"
-	rm build/.test-status

 	if [[ $status != 0 ]] ; then
 		exit $status
diff --git a/gitlab-ci.yml b/gitlab-ci.yml
index bd5df66..3f80cb8 100644
--- a/gitlab-ci.yml
+++ b/gitlab-ci.yml
@@ -34,7 +34,7 @@ variables:
     ca-certificates
     git
   VIRTME_GIT_URL: 'https://github.com/arighi/virtme-ng.git'
-  VIRTME_GIT_REF: 'v1.18'
+  VIRTME_GIT_REF: 'v1.40'

 # Jobs that test individual commits need more history to find the common
 # ancestor of the branch being tested and the default branch. Fetch up to 100
