Index: sandbox/linux/bpf_dsl/bpf_dsl.cc |
diff --git a/sandbox/linux/bpf_dsl/bpf_dsl.cc b/sandbox/linux/bpf_dsl/bpf_dsl.cc |
index 3a35903ec91a3a7f7690dce1471b81b41bffacef..276aaf6e04f28f4bf456eae709401e52544c5807 100644 |
--- a/sandbox/linux/bpf_dsl/bpf_dsl.cc |
+++ b/sandbox/linux/bpf_dsl/bpf_dsl.cc |
@@ -9,18 +9,13 @@ |
#include "base/logging.h" |
#include "base/memory/ref_counted.h" |
#include "sandbox/linux/bpf_dsl/bpf_dsl_impl.h" |
+#include "sandbox/linux/bpf_dsl/errorcode.h" |
#include "sandbox/linux/bpf_dsl/policy_compiler.h" |
-#include "sandbox/linux/seccomp-bpf/die.h" |
-#include "sandbox/linux/seccomp-bpf/errorcode.h" |
namespace sandbox { |
namespace bpf_dsl { |
namespace { |
-intptr_t BPFFailure(const struct arch_seccomp_data&, void* aux) { |
- SANDBOX_DIE(static_cast<char*>(aux)); |
-} |
- |
class AllowResultExprImpl : public internal::ResultExprImpl { |
public: |
AllowResultExprImpl() {} |
@@ -57,6 +52,22 @@ class ErrorResultExprImpl : public internal::ResultExprImpl { |
DISALLOW_COPY_AND_ASSIGN(ErrorResultExprImpl); |
}; |
+class KillResultExprImpl : public internal::ResultExprImpl { |
+ public: |
+ KillResultExprImpl() {} |
+ |
+ ErrorCode Compile(PolicyCompiler* pc) const override { |
+ return ErrorCode(ErrorCode::ERR_KILL); |
+ } |
+ |
+ bool IsDeny() const override { return true; } |
+ |
+ private: |
+ ~KillResultExprImpl() override {} |
+ |
+ DISALLOW_COPY_AND_ASSIGN(KillResultExprImpl); |
+}; |
+ |
class TraceResultExprImpl : public internal::ResultExprImpl { |
public: |
TraceResultExprImpl(uint16_t aux) : aux_(aux) {} |
@@ -255,6 +266,8 @@ uint64_t DefaultMask(size_t size) { |
} |
BoolExpr ArgEq(int num, size_t size, uint64_t mask, uint64_t val) { |
+ // If this is changed, update Arg<T>::EqualTo's static_cast rules |
+ // accordingly. |
CHECK(size == 4 || size == 8); |
// TODO(mdempsky): Should we just always use TP_64BIT? |
@@ -274,8 +287,8 @@ ResultExpr Error(int err) { |
return ResultExpr(new const ErrorResultExprImpl(err)); |
} |
-ResultExpr Kill(const char* msg) { |
- return Trap(BPFFailure, msg); |
+ResultExpr Kill() { |
+ return ResultExpr(new const KillResultExprImpl()); |
} |
ResultExpr Trace(uint16_t aux) { |