diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 7c0225103e41d..e939307371bb8 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -224,9 +224,12 @@ static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) { auto args = asanThreadArgRetval().GetArgs(self); t->ThreadStart(GetTid()); +# if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ + SANITIZER_SOLARIS __sanitizer_sigset_t sigset; t->GetStartData(sigset); SetSigProcMask(&sigset, nullptr); +# endif thread_return_t retval = (*args.routine)(args.arg_retval); asanThreadArgRetval().Finish(self, retval); @@ -249,7 +252,10 @@ INTERCEPTOR(int, pthread_create, void *thread, void *attr, u32 current_tid = GetCurrentTidOrInvalid(); __sanitizer_sigset_t sigset; +# if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ + SANITIZER_SOLARIS ScopedBlockSignals block(&sigset); +# endif AsanThread *t = AsanThread::Create(sigset, current_tid, &stack, detached); diff --git a/compiler-rt/lib/asan/asan_posix.cpp b/compiler-rt/lib/asan/asan_posix.cpp index 50b1a8448bd48..e1f66641617cc 100644 --- a/compiler-rt/lib/asan/asan_posix.cpp +++ b/compiler-rt/lib/asan/asan_posix.cpp @@ -138,7 +138,8 @@ void PlatformTSDDtor(void *tsd) { CHECK_EQ(0, pthread_setspecific(tsd_key, tsd)); return; } -# if SANITIZER_LINUX +# if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ + SANITIZER_SOLARIS // After this point it's unsafe to execute signal handlers which may be // instrumented. It's probably not just a Linux issue. BlockSignals();