Index: sandbox/linux/seccomp-bpf/sandbox_bpf.cc |
diff --git a/sandbox/linux/seccomp-bpf/sandbox_bpf.cc b/sandbox/linux/seccomp-bpf/sandbox_bpf.cc |
index 77faba4a47bd683f2d08705c7d2904f2575e9d58..6c6912afb4451a776025a906543c8992cb41616b 100644 |
--- a/sandbox/linux/seccomp-bpf/sandbox_bpf.cc |
+++ b/sandbox/linux/seccomp-bpf/sandbox_bpf.cc |
@@ -16,6 +16,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/posix/eintr_wrapper.h" |
#include "base/third_party/valgrind/valgrind.h" |
+#include "sandbox/linux/bpf_dsl/bpf_dsl.h" |
#include "sandbox/linux/bpf_dsl/codegen.h" |
#include "sandbox/linux/bpf_dsl/policy.h" |
#include "sandbox/linux/bpf_dsl/policy_compiler.h" |
@@ -109,6 +110,14 @@ uint64_t EscapePC() { |
return static_cast<uint64_t>(static_cast<uintptr_t>(rv)); |
} |
+intptr_t SandboxPanicTrap(const struct arch_seccomp_data&, void* aux) { |
+ SANDBOX_DIE(static_cast<const char*>(aux)); |
+} |
+ |
+bpf_dsl::ResultExpr SandboxPanic(const char* error) { |
+ return bpf_dsl::Trap(SandboxPanicTrap, error); |
+} |
+ |
} // namespace |
SandboxBPF::SandboxBPF(bpf_dsl::Policy* policy) |
@@ -219,6 +228,7 @@ scoped_ptr<CodeGen::Program> SandboxBPF::AssembleFilter( |
if (Trap::SandboxDebuggingAllowedByUser()) { |
compiler.DangerousSetEscapePC(EscapePC()); |
} |
+ compiler.SetPanicFunc(SandboxPanic); |
return compiler.Compile(force_verification); |
} |