1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_ 6 #define SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_ 7 8 #include "base/macros.h" 9 #include "base/memory/ref_counted.h" 10 #include "sandbox/linux/bpf_dsl/codegen.h" 11 #include "sandbox/sandbox_export.h" 12 13 namespace sandbox { 14 namespace bpf_dsl { 15 class ErrorCode; 16 class PolicyCompiler; 17 18 namespace internal { 19 20 // Internal interface implemented by BoolExpr implementations. 21 class BoolExprImpl : public base::RefCounted<BoolExprImpl> { 22 public: 23 // Compile uses |pc| to emit a CodeGen::Node that conditionally continues 24 // to either |then_node| or |false_node|, depending on whether the represented 25 // boolean expression is true or false. 26 virtual CodeGen::Node Compile(PolicyCompiler* pc, 27 CodeGen::Node then_node, 28 CodeGen::Node else_node) const = 0; 29 30 protected: 31 BoolExprImpl() {} 32 virtual ~BoolExprImpl() {} 33 34 private: 35 friend class base::RefCounted<BoolExprImpl>; 36 DISALLOW_COPY_AND_ASSIGN(BoolExprImpl); 37 }; 38 39 // Internal interface implemented by ResultExpr implementations. 40 class ResultExprImpl : public base::RefCounted<ResultExprImpl> { 41 public: 42 // Compile uses |pc| to emit a CodeGen::Node that executes the 43 // represented result expression. 44 virtual CodeGen::Node Compile(PolicyCompiler* pc) const = 0; 45 46 // HasUnsafeTraps returns whether the result expression is or recursively 47 // contains an unsafe trap expression. 48 virtual bool HasUnsafeTraps() const; 49 50 // IsAllow returns whether the result expression is an "allow" result. 51 virtual bool IsAllow() const; 52 53 // IsAllow returns whether the result expression is a "deny" result. 54 virtual bool IsDeny() const; 55 56 protected: 57 ResultExprImpl() {} 58 virtual ~ResultExprImpl() {} 59 60 private: 61 friend class base::RefCounted<ResultExprImpl>; 62 DISALLOW_COPY_AND_ASSIGN(ResultExprImpl); 63 }; 64 65 } // namespace internal 66 } // namespace bpf_dsl 67 } // namespace sandbox 68 69 #endif // SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_ 70