summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Vereshchagin <evvers@ya.ru>2018-07-05 04:09:30 +0000
committerThe Plumber <50238977+systemd-rhel-bot@users.noreply.github.com>2020-02-12 13:15:21 +0100
commitd48f105c69071b79734821bd873d9bc110492c16 (patch)
tree7da09da6c91dac3ab10808419e88351b1a53ac40
parent4057b1fad9418ab5897f273724cea21b16dd23d8 (diff)
downloadsystemd-d48f105c69071b79734821bd873d9bc110492c16.tar.gz
tests: create the asan wrapper automatically if systemd has been built with ASAN
Related: #1794787 (cherry picked from commit ec9181d2ce4c0ad8b1c70b16a2b02a2667b1cc05) (cherry picked from commit 34a38e3632fc504b55847fb9658788ccf5d42dad)
-rw-r--r--test/test-functions24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/test-functions b/test/test-functions
index 6a3594df0d..ecda9dc61f 100644
--- a/test/test-functions
+++ b/test/test-functions
@@ -28,6 +28,27 @@ STATEDIR="${BUILD_DIR:-.}/test/$(basename $(dirname $(realpath $0)))"
STATEFILE="$STATEDIR/.testdir"
TESTLOG="$STATEDIR/test.log"
+is_built_with_asan() {
+ if ! type -P objdump >/dev/null; then
+ ddebug "Failed to find objdump. Assuming systemd hasn't been built with ASAN."
+ return 1
+ fi
+
+ # Borrowed from https://github.com/google/oss-fuzz/blob/cd9acd02f9d3f6e80011cc1e9549be526ce5f270/infra/base-images/base-runner/bad_build_check#L182
+ local _asan_calls=$(objdump -dC $BUILD_DIR/systemd | egrep "callq\s+[0-9a-f]+\s+<__asan" -c)
+ if (( $_asan_calls < 1000 )); then
+ return 1
+ else
+ return 0
+ fi
+}
+
+IS_BUILT_WITH_ASAN=$(is_built_with_asan && echo yes || echo no)
+
+if [[ "$IS_BUILT_WITH_ASAN" = "yes" ]]; then
+ STRIP_BINARIES=no
+fi
+
function find_qemu_bin() {
# SUSE and Red Hat call the binary qemu-kvm. Debian and Gentoo call it kvm.
# Either way, only use this version if we aren't running in KVM, because
@@ -217,6 +238,9 @@ setup_basic_environment() {
strip_binaries
install_depmod_files
generate_module_dependencies
+ if [[ "$IS_BUILT_WITH_ASAN" = "yes" ]]; then
+ create_asan_wrapper
+ fi
}
setup_selinux() {