OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sandbox/linux/bpf_dsl/bpf_dsl.h" | 5 #include "sandbox/linux/bpf_dsl/bpf_dsl.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 private: | 83 private: |
84 virtual ~IfThenResultExprImpl() {} | 84 virtual ~IfThenResultExprImpl() {} |
85 | 85 |
86 BoolExpr cond_; | 86 BoolExpr cond_; |
87 ResultExpr then_result_; | 87 ResultExpr then_result_; |
88 ResultExpr else_result_; | 88 ResultExpr else_result_; |
89 | 89 |
90 DISALLOW_COPY_AND_ASSIGN(IfThenResultExprImpl); | 90 DISALLOW_COPY_AND_ASSIGN(IfThenResultExprImpl); |
91 }; | 91 }; |
92 | 92 |
| 93 class ConstBoolExprImpl : public internal::BoolExprImpl { |
| 94 public: |
| 95 ConstBoolExprImpl(bool value) : value_(value) {} |
| 96 |
| 97 virtual ErrorCode Compile(SandboxBPF* sb, |
| 98 ErrorCode true_ec, |
| 99 ErrorCode false_ec) const OVERRIDE { |
| 100 return value_ ? true_ec : false_ec; |
| 101 } |
| 102 |
| 103 private: |
| 104 virtual ~ConstBoolExprImpl() {} |
| 105 |
| 106 bool value_; |
| 107 |
| 108 DISALLOW_COPY_AND_ASSIGN(ConstBoolExprImpl); |
| 109 }; |
| 110 |
93 class PrimitiveBoolExprImpl : public internal::BoolExprImpl { | 111 class PrimitiveBoolExprImpl : public internal::BoolExprImpl { |
94 public: | 112 public: |
95 PrimitiveBoolExprImpl(int argno, | 113 PrimitiveBoolExprImpl(int argno, |
96 ErrorCode::ArgType is_32bit, | 114 ErrorCode::ArgType is_32bit, |
97 uint64_t mask, | 115 uint64_t mask, |
98 uint64_t value) | 116 uint64_t value) |
99 : argno_(argno), is_32bit_(is_32bit), mask_(mask), value_(value) {} | 117 : argno_(argno), is_32bit_(is_32bit), mask_(mask), value_(value) {} |
100 | 118 |
101 virtual ErrorCode Compile(SandboxBPF* sb, | 119 virtual ErrorCode Compile(SandboxBPF* sb, |
102 ErrorCode true_ec, | 120 ErrorCode true_ec, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 } | 225 } |
208 | 226 |
209 ResultExpr Error(int err) { | 227 ResultExpr Error(int err) { |
210 return ResultExpr(new const ErrorResultExprImpl(err)); | 228 return ResultExpr(new const ErrorResultExprImpl(err)); |
211 } | 229 } |
212 | 230 |
213 ResultExpr Trap(Trap::TrapFnc trap_func, void* aux) { | 231 ResultExpr Trap(Trap::TrapFnc trap_func, void* aux) { |
214 return ResultExpr(new const TrapResultExprImpl(trap_func, aux)); | 232 return ResultExpr(new const TrapResultExprImpl(trap_func, aux)); |
215 } | 233 } |
216 | 234 |
| 235 BoolExpr BoolConst(bool value) { |
| 236 return BoolExpr(new const ConstBoolExprImpl(value)); |
| 237 } |
| 238 |
217 BoolExpr operator!(const BoolExpr& cond) { | 239 BoolExpr operator!(const BoolExpr& cond) { |
218 return BoolExpr(new const NegateBoolExprImpl(cond)); | 240 return BoolExpr(new const NegateBoolExprImpl(cond)); |
219 } | 241 } |
220 | 242 |
221 BoolExpr operator&&(const BoolExpr& lhs, const BoolExpr& rhs) { | 243 BoolExpr operator&&(const BoolExpr& lhs, const BoolExpr& rhs) { |
222 return BoolExpr(new const AndBoolExprImpl(lhs, rhs)); | 244 return BoolExpr(new const AndBoolExprImpl(lhs, rhs)); |
223 } | 245 } |
224 | 246 |
225 BoolExpr operator||(const BoolExpr& lhs, const BoolExpr& rhs) { | 247 BoolExpr operator||(const BoolExpr& lhs, const BoolExpr& rhs) { |
226 return BoolExpr(new const OrBoolExprImpl(lhs, rhs)); | 248 return BoolExpr(new const OrBoolExprImpl(lhs, rhs)); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 ErrorCode SandboxBPFDSLPolicy::InvalidSyscall(SandboxBPF* sb) const { | 310 ErrorCode SandboxBPFDSLPolicy::InvalidSyscall(SandboxBPF* sb) const { |
289 return InvalidSyscall()->Compile(sb); | 311 return InvalidSyscall()->Compile(sb); |
290 } | 312 } |
291 | 313 |
292 ResultExpr SandboxBPFDSLPolicy::Trap(Trap::TrapFnc trap_func, void* aux) { | 314 ResultExpr SandboxBPFDSLPolicy::Trap(Trap::TrapFnc trap_func, void* aux) { |
293 return bpf_dsl::Trap(trap_func, aux); | 315 return bpf_dsl::Trap(trap_func, aux); |
294 } | 316 } |
295 | 317 |
296 } // namespace bpf_dsl | 318 } // namespace bpf_dsl |
297 } // namespace sandbox | 319 } // namespace sandbox |
OLD | NEW |