| 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 276aaf6e04f28f4bf456eae709401e52544c5807..0363be068e72532092e437f1562f61e239890ad5 100644
|
| --- a/sandbox/linux/bpf_dsl/bpf_dsl.cc
|
| +++ b/sandbox/linux/bpf_dsl/bpf_dsl.cc
|
| @@ -11,6 +11,7 @@
|
| #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/system_headers/linux_seccomp.h"
|
|
|
| namespace sandbox {
|
| namespace bpf_dsl {
|
| @@ -20,8 +21,8 @@ class AllowResultExprImpl : public internal::ResultExprImpl {
|
| public:
|
| AllowResultExprImpl() {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc) const override {
|
| - return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| + CodeGen::Node Compile(PolicyCompiler* pc) const override {
|
| + return pc->Return(SECCOMP_RET_ALLOW);
|
| }
|
|
|
| bool IsAllow() const override { return true; }
|
| @@ -38,8 +39,8 @@ class ErrorResultExprImpl : public internal::ResultExprImpl {
|
| CHECK(err_ >= ErrorCode::ERR_MIN_ERRNO && err_ <= ErrorCode::ERR_MAX_ERRNO);
|
| }
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc) const override {
|
| - return pc->Error(err_);
|
| + CodeGen::Node Compile(PolicyCompiler* pc) const override {
|
| + return pc->Return(SECCOMP_RET_ERRNO + err_);
|
| }
|
|
|
| bool IsDeny() const override { return true; }
|
| @@ -56,8 +57,8 @@ class KillResultExprImpl : public internal::ResultExprImpl {
|
| public:
|
| KillResultExprImpl() {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc) const override {
|
| - return ErrorCode(ErrorCode::ERR_KILL);
|
| + CodeGen::Node Compile(PolicyCompiler* pc) const override {
|
| + return pc->Return(SECCOMP_RET_KILL);
|
| }
|
|
|
| bool IsDeny() const override { return true; }
|
| @@ -72,8 +73,8 @@ class TraceResultExprImpl : public internal::ResultExprImpl {
|
| public:
|
| TraceResultExprImpl(uint16_t aux) : aux_(aux) {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc) const override {
|
| - return ErrorCode(ErrorCode::ERR_TRACE + aux_);
|
| + CodeGen::Node Compile(PolicyCompiler* pc) const override {
|
| + return pc->Return(SECCOMP_RET_TRACE + aux_);
|
| }
|
|
|
| private:
|
| @@ -91,7 +92,7 @@ class TrapResultExprImpl : public internal::ResultExprImpl {
|
| DCHECK(func_);
|
| }
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc) const override {
|
| + CodeGen::Node Compile(PolicyCompiler* pc) const override {
|
| return pc->Trap(func_, arg_, safe_);
|
| }
|
|
|
| @@ -116,7 +117,7 @@ class IfThenResultExprImpl : public internal::ResultExprImpl {
|
| const ResultExpr& else_result)
|
| : cond_(cond), then_result_(then_result), else_result_(else_result) {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc) const override {
|
| + CodeGen::Node Compile(PolicyCompiler* pc) const override {
|
| return cond_->Compile(
|
| pc, then_result_->Compile(pc), else_result_->Compile(pc));
|
| }
|
| @@ -139,10 +140,10 @@ class ConstBoolExprImpl : public internal::BoolExprImpl {
|
| public:
|
| ConstBoolExprImpl(bool value) : value_(value) {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc,
|
| - ErrorCode true_ec,
|
| - ErrorCode false_ec) const override {
|
| - return value_ ? true_ec : false_ec;
|
| + CodeGen::Node Compile(PolicyCompiler* pc,
|
| + CodeGen::Node then_node,
|
| + CodeGen::Node else_node) const override {
|
| + return value_ ? then_node : else_node;
|
| }
|
|
|
| private:
|
| @@ -153,40 +154,39 @@ class ConstBoolExprImpl : public internal::BoolExprImpl {
|
| DISALLOW_COPY_AND_ASSIGN(ConstBoolExprImpl);
|
| };
|
|
|
| -class PrimitiveBoolExprImpl : public internal::BoolExprImpl {
|
| +class MaskedEqualBoolExprImpl : public internal::BoolExprImpl {
|
| public:
|
| - PrimitiveBoolExprImpl(int argno,
|
| - ErrorCode::ArgType is_32bit,
|
| - uint64_t mask,
|
| - uint64_t value)
|
| - : argno_(argno), is_32bit_(is_32bit), mask_(mask), value_(value) {}
|
| -
|
| - ErrorCode Compile(PolicyCompiler* pc,
|
| - ErrorCode true_ec,
|
| - ErrorCode false_ec) const override {
|
| - return pc->CondMaskedEqual(
|
| - argno_, is_32bit_, mask_, value_, true_ec, false_ec);
|
| + MaskedEqualBoolExprImpl(int argno,
|
| + size_t width,
|
| + uint64_t mask,
|
| + uint64_t value)
|
| + : argno_(argno), width_(width), mask_(mask), value_(value) {}
|
| +
|
| + CodeGen::Node Compile(PolicyCompiler* pc,
|
| + CodeGen::Node then_node,
|
| + CodeGen::Node else_node) const override {
|
| + return pc->MaskedEqual(argno_, width_, mask_, value_, then_node, else_node);
|
| }
|
|
|
| private:
|
| - ~PrimitiveBoolExprImpl() override {}
|
| + ~MaskedEqualBoolExprImpl() override {}
|
|
|
| int argno_;
|
| - ErrorCode::ArgType is_32bit_;
|
| + size_t width_;
|
| uint64_t mask_;
|
| uint64_t value_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(PrimitiveBoolExprImpl);
|
| + DISALLOW_COPY_AND_ASSIGN(MaskedEqualBoolExprImpl);
|
| };
|
|
|
| class NegateBoolExprImpl : public internal::BoolExprImpl {
|
| public:
|
| explicit NegateBoolExprImpl(const BoolExpr& cond) : cond_(cond) {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc,
|
| - ErrorCode true_ec,
|
| - ErrorCode false_ec) const override {
|
| - return cond_->Compile(pc, false_ec, true_ec);
|
| + CodeGen::Node Compile(PolicyCompiler* pc,
|
| + CodeGen::Node then_node,
|
| + CodeGen::Node else_node) const override {
|
| + return cond_->Compile(pc, else_node, then_node);
|
| }
|
|
|
| private:
|
| @@ -202,10 +202,11 @@ class AndBoolExprImpl : public internal::BoolExprImpl {
|
| AndBoolExprImpl(const BoolExpr& lhs, const BoolExpr& rhs)
|
| : lhs_(lhs), rhs_(rhs) {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc,
|
| - ErrorCode true_ec,
|
| - ErrorCode false_ec) const override {
|
| - return lhs_->Compile(pc, rhs_->Compile(pc, true_ec, false_ec), false_ec);
|
| + CodeGen::Node Compile(PolicyCompiler* pc,
|
| + CodeGen::Node then_node,
|
| + CodeGen::Node else_node) const override {
|
| + return lhs_->Compile(pc, rhs_->Compile(pc, then_node, else_node),
|
| + else_node);
|
| }
|
|
|
| private:
|
| @@ -222,10 +223,11 @@ class OrBoolExprImpl : public internal::BoolExprImpl {
|
| OrBoolExprImpl(const BoolExpr& lhs, const BoolExpr& rhs)
|
| : lhs_(lhs), rhs_(rhs) {}
|
|
|
| - ErrorCode Compile(PolicyCompiler* pc,
|
| - ErrorCode true_ec,
|
| - ErrorCode false_ec) const override {
|
| - return lhs_->Compile(pc, true_ec, rhs_->Compile(pc, true_ec, false_ec));
|
| + CodeGen::Node Compile(PolicyCompiler* pc,
|
| + CodeGen::Node then_node,
|
| + CodeGen::Node else_node) const override {
|
| + return lhs_->Compile(pc, then_node,
|
| + rhs_->Compile(pc, then_node, else_node));
|
| }
|
|
|
| private:
|
| @@ -270,11 +272,7 @@ BoolExpr ArgEq(int num, size_t size, uint64_t mask, uint64_t val) {
|
| // accordingly.
|
| CHECK(size == 4 || size == 8);
|
|
|
| - // TODO(mdempsky): Should we just always use TP_64BIT?
|
| - const ErrorCode::ArgType arg_type =
|
| - (size == 4) ? ErrorCode::TP_32BIT : ErrorCode::TP_64BIT;
|
| -
|
| - return BoolExpr(new const PrimitiveBoolExprImpl(num, arg_type, mask, val));
|
| + return BoolExpr(new const MaskedEqualBoolExprImpl(num, size, mask, val));
|
| }
|
|
|
| } // namespace internal
|
|
|