| Index: sandbox/linux/bpf_dsl/bpf_dsl.h
|
| diff --git a/sandbox/linux/bpf_dsl/bpf_dsl.h b/sandbox/linux/bpf_dsl/bpf_dsl.h
|
| index da90efd421805467a64ee10311d4024d3f21aa65..b46d1adb113afa0b60fd51b0e17f26331d124663 100644
|
| --- a/sandbox/linux/bpf_dsl/bpf_dsl.h
|
| +++ b/sandbox/linux/bpf_dsl/bpf_dsl.h
|
| @@ -7,7 +7,6 @@
|
|
|
| #include <stdint.h>
|
|
|
| -#include <limits>
|
| #include <utility>
|
|
|
| #include "base/macros.h"
|
| @@ -62,7 +61,7 @@ class SandboxBPF;
|
| //
|
| // result = Allow() | Error(errno) | Trap(trap_func, arg)
|
| // | If(bool, result)[.ElseIf(bool, result)].Else(result)
|
| -// bool = arg == val | (arg & mask) == mask | (arg & mask) == 0
|
| +// bool = arg == val | (arg & mask) == val
|
| // | !bool | bool && bool | bool || bool
|
| //
|
| // The semantics of each function and operator are intended to be
|
| @@ -135,8 +134,7 @@ class SANDBOX_EXPORT Arg {
|
| public:
|
| // Initializes the Arg to represent the |num|th system call
|
| // argument (indexed from 0), which is of type |T|.
|
| - explicit Arg(int num)
|
| - : num_(num), mask_(std::numeric_limits<uint64_t>::max()) {}
|
| + explicit Arg(int num);
|
|
|
| Arg(const Arg& arg) : num_(arg.num_), mask_(arg.mask_) {}
|
|
|
| @@ -211,6 +209,9 @@ namespace internal {
|
| SANDBOX_EXPORT BoolExpr
|
| ArgEq(int num, size_t size, uint64_t mask, uint64_t val);
|
|
|
| +// Returns the default mask for a system call argument of the specified size.
|
| +SANDBOX_EXPORT uint64_t DefaultMask(size_t size);
|
| +
|
| // Internal interface implemented by BoolExpr implementations.
|
| class SANDBOX_EXPORT BoolExprImpl : public base::RefCounted<BoolExprImpl> {
|
| public:
|
| @@ -243,6 +244,11 @@ class SANDBOX_EXPORT ResultExprImpl : public base::RefCounted<ResultExprImpl> {
|
|
|
| } // namespace internal
|
|
|
| +template <typename T>
|
| +Arg<T>::Arg(int num)
|
| + : num_(num), mask_(internal::DefaultMask(sizeof(T))) {
|
| +}
|
| +
|
| // Definition requires ArgEq to have been declared. Moved out-of-line
|
| // to minimize how much internal clutter users have to ignore while
|
| // reading the header documentation.
|
|
|