fix: Do not overwrite existing signal handlers (#5062)
Such handlers can come from address sanitizers and similar. When
combined with #4971, this forward-ports
676b9bc477
/ rust-lang/rust#69685
---------
Co-authored-by: Sebastian Ullrich <sebasti@nullri.ch>
This commit is contained in:
parent
51f01d8c8a
commit
f2573dc51e
1 changed files with 13 additions and 7 deletions
|
|
@ -18,6 +18,7 @@ Port of the corresponding Rust code (see links below).
|
|||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <lean/lean.h>
|
||||
#include <initializer_list>
|
||||
#include "runtime/stack_overflow.h"
|
||||
|
||||
namespace lean {
|
||||
|
|
@ -45,7 +46,7 @@ stack_guard::stack_guard() {
|
|||
stack_guard::~stack_guard() {}
|
||||
#else
|
||||
// Install a segfault signal handler and abort with custom message if address is within stack guard.
|
||||
// https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/stack_overflow.rs
|
||||
// https://github.com/rust-lang/rust/blob/master/library/std/src/sys/pal/unix/stack_overflow.rs
|
||||
|
||||
|
||||
// https://github.com/rust-lang/rust/blob/7c8dbd969dd0ef2af6d8bab9e03ba7ce6cac41a2/src/libstd/sys/unix/thread.rs#L293
|
||||
|
|
@ -102,12 +103,17 @@ void initialize_stack_overflow() {
|
|||
#ifdef LEAN_WINDOWS
|
||||
AddVectoredExceptionHandler(0, stack_overflow_handler);
|
||||
#else
|
||||
struct sigaction action;
|
||||
memset(&action, 0, sizeof(struct sigaction));
|
||||
action.sa_flags = SA_SIGINFO | SA_ONSTACK;
|
||||
action.sa_sigaction = segv_handler;
|
||||
sigaction(SIGSEGV, &action, nullptr);
|
||||
sigaction(SIGBUS, &action, nullptr);
|
||||
for (auto signum : {SIGSEGV, SIGBUS}) {
|
||||
struct sigaction action;
|
||||
memset(&action, 0, sizeof(struct sigaction));
|
||||
sigaction(signum, nullptr, &action);
|
||||
// Configure our signal handler if one is not already set.
|
||||
if (action.sa_handler == SIG_DFL) {
|
||||
action.sa_flags = SA_SIGINFO | SA_ONSTACK;
|
||||
action.sa_sigaction = segv_handler;
|
||||
sigaction(signum, &action, nullptr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue