]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: disable nss-systemd for TEST-22 under ASan
authorFrantisek Sumsal <frantisek@sumsal.cz>
Tue, 9 Mar 2021 21:20:39 +0000 (22:20 +0100)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 10 Mar 2021 10:59:43 +0000 (11:59 +0100)
When running TEST-22 under ASan, there's a chain of events which causes
`stat` to output an extraneous ASan error message, causing following
fail:

```
+ test -d /tmp/d/1
++ stat -c %U:%G:%a /tmp/d/1
==82==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
+ test = daemon:daemon:755
.//usr/lib/systemd/tests/testdata/units/testsuite-22.02.sh: line 24: test: =: unary operator expected
```

This is caused by `stat` calling nss which in Arch's configuration calls
the nss-systemd module, that pulls in libasan which causes the $LD_PRELOAD
error message, since `stat` is an uninstrumented binary.

The $LD_PRELOAD variable is explicitly unset for all testsuite-* services
since it causes various issues when calling uninstrumented libraries, so
setting it globally is not an option. Another option would be to set
$LD_PRELOAD for each `stat` call, but that would unnecessarily clutter
the test code.

test/TEST-22-TMPFILES/test.sh

index 317e4a88f787f78f21f37ee7df6691e68afdce0a..e4874b4d230ee328627aa5c43b4489880fdb9fb2 100755 (executable)
@@ -4,4 +4,15 @@ TEST_DESCRIPTION="Tmpfiles related tests"
 TEST_NO_QEMU=1
 . $TEST_BASE_DIR/test-functions
 
+test_append_files() {
+    if [[ "$IS_BUILT_WITH_ASAN" == "yes" ]]; then
+        if [[ -z "$initdir" ]]; then
+            echo >&2 "\$initdir is not defined, can't continue"
+            exit 1
+        fi
+
+        sed -i "s/systemd//g" "$initdir/etc/nsswitch.conf"
+    fi
+}
+
 do_test "$@" 22