forked from OSchip/llvm-project
Recommit "[libFuzzer] Disable implicit builtin knowledge about memcmp-like functions when -fsanitize=fuzzer-no-link is given."
Summary: This patch disables implicit builtin knowledge about memcmp-like functions when compiling the program for fuzzing, i.e., when -fsanitize=fuzzer(-no-link) is given. This allows libFuzzer to always intercept memcmp-like functions as it effectively disables optimizing calls to such functions into different forms. This is done by adding a set of flags (-fno-builtin-memcmp and others) in the clang driver. Individual -fno-builtin-* flags previously used in several libFuzzer tests are now removed, as it is now done automatically in the clang driver. The patch was once reverted in8ef9e2bf35
, as this patch was dependent on a reverted commitf78d9fceea
. This reverted commit was recommitted in831ae45e3d
, so relanding this dependent patch too. Reviewers: morehouse, hctim Subscribers: cfe-commits, #sanitizers Tags: #clang, #sanitizers Differential Revision: https://reviews.llvm.org/D83987
This commit is contained in:
parent
7832d0f63d
commit
b52b2e1c18
|
@ -1088,6 +1088,23 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
|
|||
Sanitizers.has(SanitizerKind::Address))
|
||||
CmdArgs.push_back("-fno-assume-sane-operator-new");
|
||||
|
||||
// libFuzzer wants to intercept calls to certain library functions, so the
|
||||
// following -fno-builtin-* flags force the compiler to emit interposable
|
||||
// libcalls to these functions. Other sanitizers effectively do the same thing
|
||||
// by marking all library call sites with NoBuiltin attribute in their LLVM
|
||||
// pass. (see llvm::maybeMarkSanitizerLibraryCallNoBuiltin)
|
||||
if (Sanitizers.has(SanitizerKind::FuzzerNoLink)) {
|
||||
CmdArgs.push_back("-fno-builtin-bcmp");
|
||||
CmdArgs.push_back("-fno-builtin-memcmp");
|
||||
CmdArgs.push_back("-fno-builtin-strncmp");
|
||||
CmdArgs.push_back("-fno-builtin-strcmp");
|
||||
CmdArgs.push_back("-fno-builtin-strncasecmp");
|
||||
CmdArgs.push_back("-fno-builtin-strcasecmp");
|
||||
CmdArgs.push_back("-fno-builtin-strstr");
|
||||
CmdArgs.push_back("-fno-builtin-strcasestr");
|
||||
CmdArgs.push_back("-fno-builtin-memmem");
|
||||
}
|
||||
|
||||
// Require -fvisibility= flag on non-Windows when compiling if vptr CFI is
|
||||
// enabled.
|
||||
if (Sanitizers.hasOneOf(CFIClasses) && !TC.getTriple().isOSWindows() &&
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
UNSUPPORTED: darwin, freebsd, windows
|
||||
RUN: %cpp_compiler -fno-sanitize=address -DMEMCMP=bcmp %S/MemcmpTest.cpp -o %t
|
||||
RUN: not %run %t -seed=1 -runs=10000000 2>&1 | FileCheck %s
|
||||
CHECK: BINGO
|
|
@ -1,9 +1,9 @@
|
|||
UNSUPPORTED: darwin, freebsd, windows
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-memcmp %S/MemcmpTest.cpp -o %t-NoAsanMemcmpTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address %S/MemcmpTest.cpp -o %t-NoAsanMemcmpTest
|
||||
RUN: not %run %t-NoAsanMemcmpTest -seed=1 -runs=10000000 2>&1 | FileCheck %s
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc -fno-builtin-memcmp %S/CustomAllocator.cpp %S/MemcmpTest.cpp -o %t-NoAsanCustomAllocatorMemcmpTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc %S/CustomAllocator.cpp %S/MemcmpTest.cpp -o %t-NoAsanCustomAllocatorMemcmpTest
|
||||
RUN: not %run %t-NoAsanCustomAllocatorMemcmpTest -seed=1 -runs=10000000 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: BINGO
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
UNSUPPORTED: darwin, freebsd, windows
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-memcmp %S/Memcmp64BytesTest.cpp -o %t-NoAsanMemcmp64BytesTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address %S/Memcmp64BytesTest.cpp -o %t-NoAsanMemcmp64BytesTest
|
||||
RUN: not %run %t-NoAsanMemcmp64BytesTest -seed=1 -runs=1000000 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: BINGO
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
UNSUPPORTED: darwin, freebsd, windows
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-strcmp %S/StrcmpTest.cpp -o %t-NoAsanStrcmpTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address %S/StrcmpTest.cpp -o %t-NoAsanStrcmpTest
|
||||
RUN: not %run %t-NoAsanStrcmpTest -seed=1 -runs=2000000 2>&1 | FileCheck %s
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc -fno-builtin-strcmp %S/CustomAllocator.cpp %S/StrcmpTest.cpp -o %t-NoAsanCustomAllocatorStrcmpTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc %S/CustomAllocator.cpp %S/StrcmpTest.cpp -o %t-NoAsanCustomAllocatorStrcmpTest
|
||||
RUN: not %run %t-NoAsanCustomAllocatorStrcmpTest -seed=1 -runs=2000000 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: BINGO
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
UNSUPPORTED: darwin, freebsd, windows
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-strncmp %S/StrncmpTest.cpp -o %t-NoAsanStrncmpTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address %S/StrncmpTest.cpp -o %t-NoAsanStrncmpTest
|
||||
RUN: not %run %t-NoAsanStrncmpTest -seed=2 -runs=10000000 2>&1 | FileCheck %s
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc -fno-builtin-strncmp %S/CustomAllocator.cpp %S/StrncmpTest.cpp -o %t-NoAsanCustomAllocatorStrncmpTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc %S/CustomAllocator.cpp %S/StrncmpTest.cpp -o %t-NoAsanCustomAllocatorStrncmpTest
|
||||
RUN: not %run %t-NoAsanCustomAllocatorStrncmpTest -seed=2 -runs=10000000 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: BINGO
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
UNSUPPORTED: darwin, freebsd, windows
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-strstr %S/StrstrTest.cpp -o %t-NoAsanStrstrTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address %S/StrstrTest.cpp -o %t-NoAsanStrstrTest
|
||||
RUN: not %run %t-NoAsanStrstrTest -seed=1 -runs=2000000 2>&1 | FileCheck %s
|
||||
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc -fno-builtin-strstr %S/CustomAllocator.cpp %S/StrstrTest.cpp -o %t-NoAsanCustomAllocatorStrstrTest
|
||||
RUN: %cpp_compiler -fno-sanitize=address -fno-builtin-calloc %S/CustomAllocator.cpp %S/StrstrTest.cpp -o %t-NoAsanCustomAllocatorStrstrTest
|
||||
RUN: not %run %t-NoAsanCustomAllocatorStrstrTest -seed=1 -runs=2000000 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: BINGO
|
||||
|
|
Loading…
Reference in New Issue