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 a004971bdd952cab9d66ee275fb61fd84e8810fa..8144d805490722e9806d85d3e079f0154a322696 100644 |
--- a/sandbox/linux/bpf_dsl/bpf_dsl.cc |
+++ b/sandbox/linux/bpf_dsl/bpf_dsl.cc |
@@ -49,9 +49,42 @@ class ErrorResultExprImpl : public internal::ResultExprImpl { |
DISALLOW_COPY_AND_ASSIGN(ErrorResultExprImpl); |
}; |
+class KillResultExprImpl : public internal::ResultExprImpl { |
+ public: |
+ explicit KillResultExprImpl(const char* msg) : msg_(msg) { DCHECK(msg_); } |
+ |
+ virtual ErrorCode Compile(SandboxBPF* sb) const OVERRIDE { |
+ return sb->Kill(msg_); |
+ } |
+ |
+ private: |
+ virtual ~KillResultExprImpl() {} |
+ |
+ const char* msg_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(KillResultExprImpl); |
+}; |
+ |
+class TraceResultExprImpl : public internal::ResultExprImpl { |
+ public: |
+ TraceResultExprImpl(uint16_t aux) : aux_(aux) {} |
+ |
+ virtual ErrorCode Compile(SandboxBPF* sb) const OVERRIDE { |
+ return ErrorCode(ErrorCode::ERR_TRACE + aux_); |
+ } |
+ |
+ private: |
+ virtual ~TraceResultExprImpl() {} |
+ |
+ uint16_t aux_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TraceResultExprImpl); |
+}; |
+ |
class TrapResultExprImpl : public internal::ResultExprImpl { |
public: |
- TrapResultExprImpl(Trap::TrapFnc func, void* arg) : func_(func), arg_(arg) { |
+ TrapResultExprImpl(Trap::TrapFnc func, const void* arg) |
+ : func_(func), arg_(arg) { |
DCHECK(func_); |
} |
@@ -63,11 +96,31 @@ class TrapResultExprImpl : public internal::ResultExprImpl { |
virtual ~TrapResultExprImpl() {} |
Trap::TrapFnc func_; |
- void* arg_; |
+ const void* arg_; |
DISALLOW_COPY_AND_ASSIGN(TrapResultExprImpl); |
}; |
+class UnsafeTrapResultExprImpl : public internal::ResultExprImpl { |
+ public: |
+ UnsafeTrapResultExprImpl(Trap::TrapFnc func, const void* arg) |
+ : func_(func), arg_(arg) { |
+ DCHECK(func_); |
+ } |
+ |
+ virtual ErrorCode Compile(SandboxBPF* sb) const OVERRIDE { |
+ return sb->UnsafeTrap(func_, arg_); |
+ } |
+ |
+ private: |
+ virtual ~UnsafeTrapResultExprImpl() {} |
+ |
+ Trap::TrapFnc func_; |
+ const void* arg_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(UnsafeTrapResultExprImpl); |
+}; |
+ |
class IfThenResultExprImpl : public internal::ResultExprImpl { |
public: |
IfThenResultExprImpl(const BoolExpr& cond, |
@@ -228,10 +281,22 @@ ResultExpr Error(int err) { |
return ResultExpr(new const ErrorResultExprImpl(err)); |
} |
-ResultExpr Trap(Trap::TrapFnc trap_func, void* aux) { |
+ResultExpr Kill(const char* msg) { |
+ return ResultExpr(new const KillResultExprImpl(msg)); |
+} |
+ |
+ResultExpr Trace(uint16_t aux) { |
+ return ResultExpr(new const TraceResultExprImpl(aux)); |
+} |
+ |
+ResultExpr Trap(Trap::TrapFnc trap_func, const void* aux) { |
return ResultExpr(new const TrapResultExprImpl(trap_func, aux)); |
} |
+ResultExpr UnsafeTrap(Trap::TrapFnc trap_func, const void* aux) { |
+ return ResultExpr(new const UnsafeTrapResultExprImpl(trap_func, aux)); |
+} |
+ |
BoolExpr BoolConst(bool value) { |
return BoolExpr(new const ConstBoolExprImpl(value)); |
} |
@@ -311,7 +376,7 @@ ErrorCode SandboxBPFDSLPolicy::InvalidSyscall(SandboxBPF* sb) const { |
return InvalidSyscall()->Compile(sb); |
} |
-ResultExpr SandboxBPFDSLPolicy::Trap(Trap::TrapFnc trap_func, void* aux) { |
+ResultExpr SandboxBPFDSLPolicy::Trap(Trap::TrapFnc trap_func, const void* aux) { |
return bpf_dsl::Trap(trap_func, aux); |
} |