From 989290dbf192b24609fa36379241f2f1edf19d8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 25 Mar 2018 22:26:13 +0200 Subject: [PATCH] fuzz-unit-file: add __has_feature(memory_sanitizer) when skipping ListenNetlink= https://clang.llvm.org/docs/MemorySanitizer.html#id5 documents this check as the way to detect MemorySanitizer at compilation time. We only need to skip the test if MemorySanitizer is used. Also, use this condition in cg_slice_to_path(). There, the code that is conditionalized is not harmful in any way (it's just unnecessary), so remove the FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION condition. Fixes #8482. --- src/basic/cgroup-util.c | 2 +- src/basic/macro.h | 11 +++++++++++ src/fuzz/fuzz-unit-file.c | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index 5934ee6e8a..67e690d6f5 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -1976,7 +1976,7 @@ int cg_slice_to_path(const char *unit, char **ret) { _cleanup_free_ char *escaped = NULL; char n[dash - p + sizeof(".slice")]; -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +#if HAS_FEATURE_MEMORY_SANITIZER /* msan doesn't instrument stpncpy, so it thinks * n is later used unitialized: * https://github.com/google/sanitizers/issues/926 diff --git a/src/basic/macro.h b/src/basic/macro.h index 8911edfc4b..8e61ff0685 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -63,6 +63,17 @@ #endif #endif +#if !defined(HAS_FEATURE_MEMORY_SANITIZER) +# if defined(__has_feature) +# if __has_feature(memory_sanitizer) +# define HAS_FEATURE_MEMORY_SANITIZER 1 +# endif +# endif +# if !defined(HAS_FEATURE_MEMORY_SANITIZER) +# define HAS_FEATURE_MEMORY_SANITIZER 0 +# endif +#endif + /* Temporarily disable some warnings */ #define DISABLE_WARNING_DECLARATION_AFTER_STATEMENT \ _Pragma("GCC diagnostic push"); \ diff --git a/src/fuzz/fuzz-unit-file.c b/src/fuzz/fuzz-unit-file.c index a5cd9b4aa9..17da776ae3 100644 --- a/src/fuzz/fuzz-unit-file.c +++ b/src/fuzz/fuzz-unit-file.c @@ -48,7 +48,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { ll = l + strspn(l, WHITESPACE); - if (startswith(ll, "ListenNetlink=")) { + if (HAS_FEATURE_MEMORY_SANITIZER && startswith(ll, "ListenNetlink=")) { /* ListenNetlink causes a false positive in msan, * let's skip this for now. */ log_notice("Skipping test because ListenNetlink= is present");