Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef SANDBOX_LINUX_SECCOMP_BPF_ERRORCODE_H__ | 5 #ifndef SANDBOX_LINUX_SECCOMP_BPF_ERRORCODE_H__ |
| 6 #define SANDBOX_LINUX_SECCOMP_BPF_ERRORCODE_H__ | 6 #define SANDBOX_LINUX_SECCOMP_BPF_ERRORCODE_H__ |
| 7 | 7 |
| 8 #include "sandbox/linux/seccomp-bpf/linux_seccomp.h" | |
| 9 #include "sandbox/linux/seccomp-bpf/trap.h" | 8 #include "sandbox/linux/seccomp-bpf/trap.h" |
| 10 #include "sandbox/sandbox_export.h" | 9 #include "sandbox/sandbox_export.h" |
| 11 | 10 |
| 12 namespace sandbox { | 11 namespace sandbox { |
| 13 | 12 |
| 14 struct arch_seccomp_data; | |
| 15 | |
| 16 // This class holds all the possible values that can be returned by a sandbox | 13 // This class holds all the possible values that can be returned by a sandbox |
| 17 // policy. | 14 // policy. |
| 18 // We can either wrap a symbolic ErrorCode (i.e. ERR_XXX enum values), an | 15 // We can either wrap a symbolic ErrorCode (i.e. ERR_XXX enum values), an |
| 19 // errno value (in the range 0..4095), a pointer to a TrapFnc callback | 16 // errno value (in the range 0..4095), a pointer to a TrapFnc callback |
| 20 // handling a SECCOMP_RET_TRAP trap, or a complex constraint. | 17 // handling a SECCOMP_RET_TRAP trap, or a complex constraint. |
| 21 // All of the commonly used values are stored in the "err_" field. So, code | 18 // All of the commonly used values are stored in the "err_" field. So, code |
| 22 // that is using the ErrorCode class typically operates on a single 32bit | 19 // that is using the ErrorCode class typically operates on a single 32bit |
| 23 // field. | 20 // field. |
| 24 class SANDBOX_EXPORT ErrorCode { | 21 class SANDBOX_EXPORT ErrorCode { |
| 25 public: | 22 public: |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 ET_SIMPLE, | 103 ET_SIMPLE, |
| 107 ET_TRAP, | 104 ET_TRAP, |
| 108 ET_COND, | 105 ET_COND, |
| 109 }; | 106 }; |
| 110 | 107 |
| 111 // We allow the default constructor, as it makes the ErrorCode class | 108 // We allow the default constructor, as it makes the ErrorCode class |
| 112 // much easier to use. But if we ever encounter an invalid ErrorCode | 109 // much easier to use. But if we ever encounter an invalid ErrorCode |
| 113 // when compiling a BPF filter, we deliberately generate an invalid | 110 // when compiling a BPF filter, we deliberately generate an invalid |
| 114 // program that will get flagged both by our Verifier class and by | 111 // program that will get flagged both by our Verifier class and by |
| 115 // the Linux kernel. | 112 // the Linux kernel. |
| 116 ErrorCode() : error_type_(ET_INVALID), err_(SECCOMP_RET_INVALID) {} | 113 ErrorCode(); |
|
jln (very slow on Chromium)
2014/09/16 20:44:59
Do we still really use the default constructor sin
mdempsky
2014/09/16 20:50:24
Good point. No, it's no longer needed. I've remo
| |
| 117 explicit ErrorCode(int err); | 114 explicit ErrorCode(int err); |
| 118 | 115 |
| 119 // For all practical purposes, ErrorCodes are treated as if they were | 116 // For all practical purposes, ErrorCodes are treated as if they were |
| 120 // structs. The copy constructor and assignment operator are trivial and | 117 // structs. The copy constructor and assignment operator are trivial and |
| 121 // we do not need to explicitly specify them. | 118 // we do not need to explicitly specify them. |
| 122 // Most notably, it is in fact perfectly OK to directly copy the passed_ and | 119 // Most notably, it is in fact perfectly OK to directly copy the passed_ and |
| 123 // failed_ field. They only ever get set by our private constructor, and the | 120 // failed_ field. They only ever get set by our private constructor, and the |
| 124 // callers handle life-cycle management for these objects. | 121 // callers handle life-cycle management for these objects. |
| 125 | 122 |
| 126 // Destructor | 123 // Destructor |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 189 | 186 |
| 190 // 32bit field used for all possible types of ErrorCode values. This is | 187 // 32bit field used for all possible types of ErrorCode values. This is |
| 191 // the value that uniquely identifies any ErrorCode and it (typically) can | 188 // the value that uniquely identifies any ErrorCode and it (typically) can |
| 192 // be emitted directly into a BPF filter program. | 189 // be emitted directly into a BPF filter program. |
| 193 uint32_t err_; | 190 uint32_t err_; |
| 194 }; | 191 }; |
| 195 | 192 |
| 196 } // namespace sandbox | 193 } // namespace sandbox |
| 197 | 194 |
| 198 #endif // SANDBOX_LINUX_SECCOMP_BPF_ERRORCODE_H__ | 195 #endif // SANDBOX_LINUX_SECCOMP_BPF_ERRORCODE_H__ |
| OLD | NEW |