[llvm] r303828 - [libFuzzer] Don't replace custom signal handlers.
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Wed May 24 18:43:14 PDT 2017
Author: vitalybuka
Date: Wed May 24 20:43:13 2017
New Revision: 303828
URL: http://llvm.org/viewvc/llvm-project?rev=303828&view=rev
Log:
[libFuzzer] Don't replace custom signal handlers.
Summary:
This allows to keep handlers installed by sanitizers.
In other cases third-party code can replace handlers after libFuzzer
initialization anyway.
Reviewers: kcc
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33522
Modified:
llvm/trunk/lib/Fuzzer/FuzzerUtilPosix.cpp
llvm/trunk/lib/Fuzzer/test/fuzzer-segv.test
Modified: llvm/trunk/lib/Fuzzer/FuzzerUtilPosix.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerUtilPosix.cpp?rev=303828&r1=303827&r2=303828&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerUtilPosix.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerUtilPosix.cpp Wed May 24 20:43:13 2017
@@ -47,8 +47,21 @@ static void FileSizeExceedHandler(int, s
static void SetSigaction(int signum,
void (*callback)(int, siginfo_t *, void *)) {
- struct sigaction sigact;
- memset(&sigact, 0, sizeof(sigact));
+ struct sigaction sigact = {};
+ if (sigaction(signum, nullptr, &sigact)) {
+ Printf("libFuzzer: sigaction failed with %d\n", errno);
+ exit(1);
+ }
+ if (sigact.sa_flags & SA_SIGINFO) {
+ if (sigact.sa_sigaction)
+ return;
+ } else {
+ if (sigact.sa_handler != SIG_DFL && sigact.sa_handler != SIG_IGN &&
+ sigact.sa_handler != SIG_ERR)
+ return;
+ }
+
+ sigact = {};
sigact.sa_sigaction = callback;
if (sigaction(signum, &sigact, 0)) {
Printf("libFuzzer: sigaction failed with %d\n", errno);
Modified: llvm/trunk/lib/Fuzzer/test/fuzzer-segv.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/test/fuzzer-segv.test?rev=303828&r1=303827&r2=303828&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/test/fuzzer-segv.test (original)
+++ llvm/trunk/lib/Fuzzer/test/fuzzer-segv.test Wed May 24 20:43:13 2017
@@ -3,3 +3,5 @@ LIBFUZZER_OWN_SEGV_HANDLER: == ERROR: li
LIBFUZZER_OWN_SEGV_HANDLER: SUMMARY: libFuzzer: deadly signal
LIBFUZZER_OWN_SEGV_HANDLER: Test unit written to ./crash-
+RUN: env ASAN_OPTIONS=handle_segv=1 not LLVMFuzzer-NullDerefTest 2>&1 | FileCheck %s --check-prefix=LIBFUZZER_ASAN_SEGV_HANDLER
+LIBFUZZER_ASAN_SEGV_HANDLER: ERROR: AddressSanitizer: {{SEGV|access-violation}} on unknown address
More information about the llvm-commits
mailing list