[compiler-rt] r359254 - [libFuzzer] Disable MSan interceptors in SIGINT handler.
Matt Morehouse via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 25 17:17:41 PDT 2019
Author: morehouse
Date: Thu Apr 25 17:17:41 2019
New Revision: 359254
URL: http://llvm.org/viewvc/llvm-project?rev=359254&view=rev
Log:
[libFuzzer] Disable MSan interceptors in SIGINT handler.
Summary:
Avoids an MSan false positive if the SIGINT comes while the user
callback is running. The false positive happens when the interrupt
handler calls opendir() to remove some temporary files, which is
intercepted by MSan.
Fixes https://github.com/google/oss-fuzz/issues/2332.
Reviewers: kcc
Reviewed By: kcc
Subscribers: llvm-commits, Dor1s, metzman
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D61163
Added:
compiler-rt/trunk/test/fuzzer/sigint.test
Modified:
compiler-rt/trunk/lib/fuzzer/FuzzerLoop.cpp
Modified: compiler-rt/trunk/lib/fuzzer/FuzzerLoop.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/fuzzer/FuzzerLoop.cpp?rev=359254&r1=359253&r2=359254&view=diff
==============================================================================
--- compiler-rt/trunk/lib/fuzzer/FuzzerLoop.cpp (original)
+++ compiler-rt/trunk/lib/fuzzer/FuzzerLoop.cpp Thu Apr 25 17:17:41 2019
@@ -266,6 +266,7 @@ void Fuzzer::MaybeExitGracefully() {
void Fuzzer::InterruptCallback() {
Printf("==%lu== libFuzzer: run interrupted; exiting\n", GetPid());
PrintFinalStats();
+ ScopedDisableMsanInterceptorChecks S; // RmDirRecursive may call opendir().
RmDirRecursive(TempPath(".dir"));
// Stop right now, don't perform any at-exit actions.
_Exit(Options.InterruptExitCode);
@@ -681,7 +682,7 @@ void Fuzzer::MutateAndTestOne() {
Size <= CurrentMaxMutationLen)
NewSize = MD.MutateWithMask(CurrentUnitData, Size, Size,
II.DataFlowTraceForFocusFunction);
-
+
// If MutateWithMask either failed or wasn't called, call default Mutate.
if (!NewSize)
NewSize = MD.Mutate(CurrentUnitData, Size, CurrentMaxMutationLen);
Added: compiler-rt/trunk/test/fuzzer/sigint.test
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/fuzzer/sigint.test?rev=359254&view=auto
==============================================================================
--- compiler-rt/trunk/test/fuzzer/sigint.test (added)
+++ compiler-rt/trunk/test/fuzzer/sigint.test Thu Apr 25 17:17:41 2019
@@ -0,0 +1,17 @@
+# FIXME: Disabled on Windows for now because of reliance on posix only features
+# (eg: export, "&", pkill).
+UNSUPPORTED: darwin, windows
+
+# Check that libFuzzer exits gracefully under SIGINT with MSan.
+RUN: rm -rf %t
+RUN: mkdir -p %t
+RUN: %msan_compiler %S/SleepOneSecondTest.cpp -o %t/LFSIGINT
+
+RUN: %run %t/LFSIGINT 2> %t/log & export PID=$!
+RUN: sleep 2
+RUN: kill -SIGINT $PID
+RUN: sleep 3
+RUN: cat %t/log | FileCheck %s
+
+CHECK: libFuzzer: run interrupted; exiting
+CHECK-NOT: WARNING: MemorySanitizer
More information about the llvm-commits
mailing list