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..a014e7fbcf7bed796d3132884351ca000b936f57 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,11 @@ 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; |
+ sigaddset(&sa.sa_mask, LINUX_SIGSEGV); |
mdempsky
2015/04/13 18:55:07
With POSIX sigaction(), SIGSEGV would be masked au
hidehiko
2015/04/14 11:56:40
IIUC, SIGSEGV is masked in the handler invocation
mdempsky
2015/04/17 04:36:22
Sorry, what I meant was:
1. Setting sa_mask is
hidehiko
2015/04/17 06:18:41
Oh, I misunderstood, and now fixed. Thanks!
|
+ sys_sigaction(LINUX_SIGSEGV, &sa, nullptr); |
Syscall::Call(__NR_prctl, PR_SET_DUMPABLE, (void*)0, (void*)0, (void*)0); |
if (*(volatile char*)0) { |
} |