Home | History | Annotate | Download | only in seccomp-bpf

Lines Matching full:code

2 // Use of this source code is governed by a BSD-style license that can be
32 const ErrorCode& code,
34 if (code.error_type() == ErrorCode::ET_SIMPLE ||
35 code.error_type() == ErrorCode::ET_TRAP) {
36 return code.err();
37 } else if (code.error_type() == ErrorCode::ET_COND) {
38 if (code.width() == ErrorCode::TP_32BIT &&
39 (data.args[code.argno()] >> 32) &&
40 (data.args[code.argno()] & 0xFFFFFFFF80000000ull) !=
44 switch (code.op()) {
47 (code.width() == ErrorCode::TP_32BIT
48 ? uint32_t(data.args[code.argno()])
49 : data.args[code.argno()]) == code.value()
50 ? *code.passed()
51 : *code.failed(),
55 ((code.width() == ErrorCode::TP_32BIT
56 ? uint32_t(data.args[code.argno()])
57 : data.args[code.argno()]) &
58 code.value()) == code.value()
59 ? *code.passed()
60 : *code.failed(),
64 (code.width() == ErrorCode::TP_32BIT
65 ? uint32_t(data.args[code.argno()])
66 : data.args[code.argno()]) &
67 code.value()
68 ? *code.passed()
69 : *code.failed(),
83 const ErrorCode& code,
85 if (code.error_type() == ErrorCode::ET_SIMPLE ||
86 code.error_type() == ErrorCode::ET_TRAP) {
92 // against "code.err()". This works most of the time, but it doesn't
95 // code flow decisions in multiple nodes of the decision tree, and the
96 // only way to compute the correct error code in that situation is by
98 *err = "Exit code from BPF program doesn't match";
101 } else if (code.error_type() == ErrorCode::ET_COND) {
102 if (code.argno() < 0 || code.argno() >= 6) {
103 *err = "Invalid argument number in error code";
106 switch (code.op()) {
110 data->args[code.argno()] = code.value();
112 sandbox, program, data, root_code, *code.passed(), err)) {
118 data->args[code.argno()] = code.value() ^ 0x55AA55AA;
120 sandbox, program, data, root_code, *code.failed(), err)) {
127 if (code.width() == ErrorCode::TP_32BIT) {
128 if (code.value() >> 32) {
137 data->args[code.argno()] = 0x100000000ull;
153 data->args[code.argno()] = code.value() ^ 0x55AA55AA00000000ull;
155 sandbox, program, data, root_code, *code.failed(), err)) {
173 (!code.value() && code.op() == ErrorCode::OP_HAS_ANY_BITS) ||
180 ((code.value() & ~uint64_t(uintptr_t(-1))) &&
181 code.op() == ErrorCode::OP_HAS_ALL_BITS) ||
182 (code.value() && !(code.value() & uintptr_t(-1)) &&
183 code.op() == ErrorCode::OP_HAS_ANY_BITS)
184 ? *code.failed()
185 : *code.passed();
190 !code.value() && code.op() == ErrorCode::OP_HAS_ALL_BITS
191 ? *code.passed()
192 : *code.failed();
194 data->args[code.argno()] = code.value() & uintptr_t(-1);
199 data->args[code.argno()] = uintptr_t(-1);
204 data->args[code.argno()] = 0;
212 *err = "Unsupported operation in conditional error code";
216 *err = "Attempting to return invalid error code from BPF program";
223 if (BPF_SIZE(insn.code) != BPF_W || BPF_MODE(insn.code) != BPF_ABS) {
241 if (BPF_OP(insn.code) == BPF_JA) {
250 if (BPF_SRC(insn.code) != BPF_K || !state->acc_is_valid ||
255 switch (BPF_OP(insn.code)) {
291 if (BPF_SRC(insn.code) != BPF_K) {
299 if (BPF_OP(insn.code) == BPF_NEG) {
303 if (BPF_SRC(insn.code) != BPF_K) {
307 switch (BPF_OP(insn.code)) {
376 // our BPF program will make us fail with a misleading error code.
390 ErrorCode code = policy.EvaluateSyscall(sandbox, sysnum);
391 if (!VerifyErrorCode(sandbox, program, &data, code, code, err)) {
412 switch (BPF_CLASS(insn.code)) {
430 *err = "Unexpected return code found in BPF program";