On 210618 1148, Alexander Bulekov wrote:
<snip>
> diff --git a/configure b/configure
> index debd50c085..40412bcfcf 100755
> --- a/configure
> +++ b/configure
> @@ -6089,6 +6089,10 @@ if test "$fuzzing" = "yes" ; then
> # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
> # needed CFLAGS have already been provided
> if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
> + # Specify a filter to only instrument code that is directly related to
> + # virtual-devices.
> + QEMU_CFLAGS="$QEMU_CFLAGS
> -fsanitize-coverage-allowlist=$source_path/scripts/oss-fuzz/instrumentation-filter"
Hmm I just realized this flag seems to only be available for clang-11+.
We will need to do some probing before enabling it here..
> +
> # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all
> the
> # compiled code.
> QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
> diff --git a/scripts/oss-fuzz/instrumentation-filter
> b/scripts/oss-fuzz/instrumentation-filter
> new file mode 100644
> index 0000000000..44e853159c
> --- /dev/null
> +++ b/scripts/oss-fuzz/instrumentation-filter
> @@ -0,0 +1,14 @@
> +# Code that we actually want the fuzzer to target
> +# See:
> https://clang.llvm.org/docs/SanitizerCoverage.html#disabling-instrumentation-without-source-modification
> +#
> +src:*/hw/*
> +src:*/include/hw/*
> +src:*/slirp/*
> +
> +# We don't care about coverage over fuzzer-specific code, however we should
> +# instrument the fuzzer entry-point so libFuzzer always sees at least some
> +# coverage - otherwise it will exit after the first input
> +src:*/tests/qtest/fuzz/fuzz.c
> +
> +# Enable instrumentation for all functions in those files
> +fun:*
> --
> 2.28.0
>