forked from OSchip/llvm-project
[ubsan] warn inside the sigaction interceptor if static linking is suspected, and continue instead of crashing on null deref
[ubsan] warn inside the sigaction interceptor if static linking is suspected, and continue instead of crashing on null deref Reviewed By: kostik Differential Revision: https://reviews.llvm.org/D109081
This commit is contained in:
parent
88511f6bc5
commit
b0fdbadf9f
|
@ -29,8 +29,16 @@ using namespace __sanitizer;
|
|||
#endif
|
||||
|
||||
#ifndef SIGNAL_INTERCEPTOR_SIGACTION_IMPL
|
||||
#define SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact) \
|
||||
{ return REAL(sigaction_symname)(signum, act, oldact); }
|
||||
# define SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact) \
|
||||
{ \
|
||||
if (!REAL(sigaction_symname)) { \
|
||||
Printf( \
|
||||
"Warning: REAL(sigaction_symname) == nullptr. This may happen " \
|
||||
"if you link with ubsan statically. Sigaction will not work.\n"); \
|
||||
return -1; \
|
||||
} \
|
||||
return REAL(sigaction_symname)(signum, act, oldact); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_BSD_SIGNAL
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// REQUIRES: ubsan-standalone
|
||||
// REQUIRES: arch=x86_64
|
||||
// RUN: %clangxx -fsanitize=bool -static %s -o %t && UBSAN_OPTIONS=handle_segv=0:handle_sigbus=0:handle_sigfpe=0 %run %t 2>&1 | FileCheck %s
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
struct sigaction old_action;
|
||||
sigaction(SIGINT, nullptr, &old_action);
|
||||
// CHECK: Warning: REAL(sigaction_symname) == nullptr.
|
||||
printf("PASS\n");
|
||||
// CHECK: PASS
|
||||
}
|
Loading…
Reference in New Issue