diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-11-10 02:06:59 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-11-10 02:06:59 +0000 |
commit | 37126fe7bdc305799c313783b495a3852bed5dba (patch) | |
tree | 7a78152cbb390fb1d965c41f41de32416c32d3ed /lib/msan/msan_interceptors.cc | |
parent | 0a297e606c12629dce5a8357fc51384d8dbe5787 (diff) |
[msan] Deadly signal handler for msan
Summary: Part of https://github.com/google/sanitizers/issues/637
Reviewers: eugenis, alekseyshl
Subscribers: llvm-commits, kubamracek
Differential Revision: https://reviews.llvm.org/D39826
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@317864 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan/msan_interceptors.cc')
-rw-r--r-- | lib/msan/msan_interceptors.cc | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index feae876fd..f5822db28 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -1006,20 +1006,6 @@ static void read_sigaction(const __sanitizer_sigaction *act) { CHECK_UNPOISONED(&act->sa_mask, sizeof(act->sa_mask)); } -static int sigaction_impl(int signo, const __sanitizer_sigaction *act, - __sanitizer_sigaction *oldact); -static uptr signal_impl(int signo, uptr cb); - -INTERCEPTOR(int, sigaction, int signo, const __sanitizer_sigaction *act, - __sanitizer_sigaction *oldact) { - return sigaction_impl(signo, act, oldact); -} - -INTERCEPTOR(int, signal, int signo, uptr cb) { - cb = signal_impl(signo, cb); - return REAL(signal)(signo, cb); -} - extern "C" int pthread_attr_init(void *attr); extern "C" int pthread_attr_destroy(void *attr); @@ -1275,6 +1261,20 @@ int OnExit() { #include "sanitizer_common/sanitizer_platform_interceptors.h" #include "sanitizer_common/sanitizer_common_interceptors.inc" +static uptr signal_impl(int signo, uptr cb); +static int sigaction_impl(int signo, const __sanitizer_sigaction *act, + __sanitizer_sigaction *oldact); + +#define SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signo, act, oldact) \ + { return sigaction_impl(signo, act, oldact); } + +#define SIGNAL_INTERCEPTOR_SIGNAL_IMPL(func, signo, handler) \ + { \ + handler = signal_impl(signo, handler); \ + return REAL(func)(signo, handler); \ + } + +#include "sanitizer_common/sanitizer_signal_interceptors.inc" static int sigaction_impl(int signo, const __sanitizer_sigaction *act, __sanitizer_sigaction *oldact) { @@ -1490,6 +1490,7 @@ void InitializeInterceptors() { static int inited = 0; CHECK_EQ(inited, 0); InitializeCommonInterceptors(); + InitializeSignalInterceptors(); INTERCEPT_FUNCTION(mmap); MSAN_MAYBE_INTERCEPT_MMAP64; |