• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
BoolExprImpl()31   BoolExprImpl() {}
~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:
ResultExprImpl()57   ResultExprImpl() {}
~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