Index: sandbox/linux/seccomp-bpf/die.cc |
diff --git a/sandbox/linux/seccomp-bpf/die.cc b/sandbox/linux/seccomp-bpf/die.cc |
index 777c9d1139298f46d78bb1ef0a97667b48414015..3baf1f13d9e5272d268b06f312bb17cf055fd23d 100644 |
--- a/sandbox/linux/seccomp-bpf/die.cc |
+++ b/sandbox/linux/seccomp-bpf/die.cc |
@@ -16,6 +16,8 @@ |
#include "base/logging.h" |
#include "base/posix/eintr_wrapper.h" |
#include "sandbox/linux/seccomp-bpf/syscall.h" |
+#include "sandbox/linux/services/syscall_wrappers.h" |
+#include "sandbox/linux/system_headers/linux_signal.h" |
namespace sandbox { |
@@ -32,7 +34,10 @@ void Die::ExitGroup() { |
// to a defined state; but we have not way to verify whether we actually |
// succeeded in doing so. Nonetheless, triggering a fatal signal could help |
// us terminate. |
- signal(SIGSEGV, SIG_DFL); |
+ struct sigaction sa = {}; |
+ sa.sa_handler = LINUX_SIG_DFL; |
+ sa.sa_flags = LINUX_SA_RESTART; |
+ sys_sigaction(LINUX_SIGSEGV, &sa, nullptr); |
Syscall::Call(__NR_prctl, PR_SET_DUMPABLE, (void*)0, (void*)0, (void*)0); |
if (*(volatile char*)0) { |
} |