Skip to content

Commit 2fbe385

Browse files
thurstondaaryanshukla
authored andcommitted
[sanitizer_common] Block asynchronous signals only (llvm#98200)
This changes the behavior of `BlockSignals` and `ScopedBlockSignals` to block only asynchronous signals. This extension is intended to be used in a future fix for MSan (block async signals during `MsanThread::Destroy`).
1 parent 1f19590 commit 2fbe385

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *oldset) {
155155
CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, set, oldset));
156156
}
157157

158+
// Block asynchronous signals
158159
void BlockSignals(__sanitizer_sigset_t *oldset) {
159160
__sanitizer_sigset_t set;
160161
internal_sigfillset(&set);
@@ -170,6 +171,16 @@ void BlockSignals(__sanitizer_sigset_t *oldset) {
170171
// hang.
171172
internal_sigdelset(&set, 31);
172173
# endif
174+
175+
// Don't block synchronous signals
176+
internal_sigdelset(&set, SIGSEGV);
177+
internal_sigdelset(&set, SIGBUS);
178+
internal_sigdelset(&set, SIGILL);
179+
internal_sigdelset(&set, SIGTRAP);
180+
internal_sigdelset(&set, SIGABRT);
181+
internal_sigdelset(&set, SIGFPE);
182+
internal_sigdelset(&set, SIGPIPE);
183+
173184
SetSigProcMask(&set, oldset);
174185
}
175186

0 commit comments

Comments
 (0)