Index: lib/fuzzer/FuzzerLoop.cpp =================================================================== --- lib/fuzzer/FuzzerLoop.cpp +++ lib/fuzzer/FuzzerLoop.cpp @@ -266,6 +266,7 @@ 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 @@ 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); Index: test/fuzzer/sigint.test =================================================================== --- test/fuzzer/sigint.test +++ test/fuzzer/sigint.test @@ -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