From 47abf88e49a2a9394818ab1eabb442788d8931d8 Mon Sep 17 00:00:00 2001 From: Thurston Dang Date: Fri, 10 Oct 2025 20:04:55 +0000 Subject: [PATCH 1/2] [NFCI][sanitizer] Refactor SIGNAL_INTERCEPTOR_SIGACTION_IMPL to not immediately return This enables follow-up work (https://github.com/llvm/llvm-project/pull/162746), which will inspect the return value and do additional work before returning. --- .../sanitizer_signal_interceptors.inc | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc index 94e4e2954a3b9..046e572d3c2e2 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc @@ -24,8 +24,10 @@ using namespace __sanitizer; #endif #ifndef SIGNAL_INTERCEPTOR_SIGNAL_IMPL -#define SIGNAL_INTERCEPTOR_SIGNAL_IMPL(func, signum, handler) \ - { return REAL(func)(signum, handler); } +# define SIGNAL_INTERCEPTOR_SIGNAL_IMPL(func, signum, handler) \ + { \ + ret = REAL(func)(signum, handler); \ + } #endif #ifndef SIGNAL_INTERCEPTOR_SIGACTION_IMPL @@ -35,9 +37,9 @@ using namespace __sanitizer; Printf( \ "Warning: REAL(sigaction_symname) == nullptr. This may happen " \ "if you link with ubsan statically. Sigaction will not work.\n"); \ - return -1; \ + ret = -1; \ } \ - return REAL(sigaction_symname)(signum, act, oldact); \ + ret = REAL(sigaction_symname)(signum, act, oldact); \ } #endif @@ -45,7 +47,10 @@ using namespace __sanitizer; INTERCEPTOR(uptr, bsd_signal, int signum, uptr handler) { SIGNAL_INTERCEPTOR_ENTER(); if (GetHandleSignalMode(signum) == kHandleSignalExclusive) return 0; + + int ret; SIGNAL_INTERCEPTOR_SIGNAL_IMPL(bsd_signal, signum, handler); + return ret; } #define INIT_BSD_SIGNAL COMMON_INTERCEPT_FUNCTION(bsd_signal) #else // SANITIZER_INTERCEPT_BSD_SIGNAL @@ -57,7 +62,10 @@ INTERCEPTOR(uptr, signal, int signum, uptr handler) { SIGNAL_INTERCEPTOR_ENTER(); if (GetHandleSignalMode(signum) == kHandleSignalExclusive) return (uptr) nullptr; + + int ret; SIGNAL_INTERCEPTOR_SIGNAL_IMPL(signal, signum, handler); + return ret; } #define INIT_SIGNAL COMMON_INTERCEPT_FUNCTION(signal) @@ -68,7 +76,10 @@ INTERCEPTOR(int, sigaction_symname, int signum, if (!oldact) return 0; act = nullptr; } + + uptr ret; SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact); + return ret; } #define INIT_SIGACTION COMMON_INTERCEPT_FUNCTION(sigaction_symname) From 6dd6fe227ce1cf5c44546b5323b34bac9a7c5207 Mon Sep 17 00:00:00 2001 From: Thurston Dang Date: Fri, 10 Oct 2025 21:41:25 +0000 Subject: [PATCH 2/2] Add missing else --- .../lib/sanitizer_common/sanitizer_signal_interceptors.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc index 046e572d3c2e2..b3f0f970b1367 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_signal_interceptors.inc @@ -38,8 +38,9 @@ using namespace __sanitizer; "Warning: REAL(sigaction_symname) == nullptr. This may happen " \ "if you link with ubsan statically. Sigaction will not work.\n"); \ ret = -1; \ + } else { \ + ret = REAL(sigaction_symname)(signum, act, oldact); \ } \ - ret = REAL(sigaction_symname)(signum, act, oldact); \ } #endif