From 8ed816611d2aa8020e05d9dc2fdb4f46dc9b5aab Mon Sep 17 00:00:00 2001 From: Aaron Green Date: Fri, 6 Sep 2024 22:53:01 +0000 Subject: [PATCH] pw_fuzzer: Add asan_default_options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL adds a means to specify ASAN_OPTIONS in order to avoid false positives introduced by fuzz tests which are only partially instrumented. In fuzz tests, the engine is excluded from instrumentation to avoid polluting the sanitizer coverage with code paths not related to the target being fuzzed. Change-Id: I642668026eeaa9e6c051fe64050512f3cbb32ff1 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/234452 Lint: Lint 🤖 Reviewed-by: Taylor Cramer Commit-Queue: Aaron Green --- pw_fuzzer/BUILD.gn | 9 ++++++++- pw_fuzzer/asan_default_options.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 pw_fuzzer/asan_default_options.c diff --git a/pw_fuzzer/BUILD.gn b/pw_fuzzer/BUILD.gn index f470ac2588..2528af79a8 100644 --- a/pw_fuzzer/BUILD.gn +++ b/pw_fuzzer/BUILD.gn @@ -71,6 +71,10 @@ pw_test_group("tests") { ] } +pw_source_set("asan_default_options") { + sources = [ "asan_default_options.c" ] +} + ################################################################################ # FuzzTest support # @@ -182,7 +186,10 @@ if (dir_pw_third_party_fuzztest == "") { if (pw_toolchain_OSS_FUZZ_ENABLED) { deps = [ "$dir_pw_unit_test:simple_printing_main" ] } else { - deps = [ "$dir_pw_third_party/fuzztest/fuzztest:fuzztest_gtest_main" ] + deps = [ + ":asan_default_options", + "$dir_pw_third_party/fuzztest/fuzztest:fuzztest_gtest_main", + ] } } } diff --git a/pw_fuzzer/asan_default_options.c b/pw_fuzzer/asan_default_options.c new file mode 100644 index 0000000000..d62ad1b654 --- /dev/null +++ b/pw_fuzzer/asan_default_options.c @@ -0,0 +1,28 @@ +// Copyright 2024 The Pigweed Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy of +// the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. + +#include + +// Sets the default options for AddressSanitizer. +// +// See https://github.com/google/sanitizers/wiki/AddressSanitizerFlags for +// more details. +const char* __asan_default_options(void) { + return + // FuzzTest is not instrumented to avoid polluting the code coverage used + // to guide fuzzing. It also uses STL containers such as vectors, leading + // to false positives such as those described in + // github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow + "detect_container_overflow=0"; +}