Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: sandbox/linux/bpf_dsl/bpf_dsl_more_unittest.cc

Issue 588143007: sandbox: Convert remaining legacy tests to use policy classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Another style fix (grr clang-format) Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #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 #include <fcntl.h>
8 #include <pthread.h> 9 #include <pthread.h>
9 #include <sched.h> 10 #include <sched.h>
10 #include <signal.h> 11 #include <signal.h>
11 #include <sys/prctl.h> 12 #include <sys/prctl.h>
12 #include <sys/ptrace.h> 13 #include <sys/ptrace.h>
13 #include <sys/syscall.h> 14 #include <sys/syscall.h>
14 #include <sys/time.h> 15 #include <sys/time.h>
15 #include <sys/types.h> 16 #include <sys/types.h>
16 #include <sys/utsname.h> 17 #include <sys/utsname.h>
17 #include <unistd.h> 18 #include <unistd.h>
18 #include <sys/socket.h> 19 #include <sys/socket.h>
19 20
20 #if defined(ANDROID) 21 #if defined(ANDROID)
21 // Work-around for buggy headers in Android's NDK 22 // Work-around for buggy headers in Android's NDK
22 #define __user 23 #define __user
23 #endif 24 #endif
24 #include <linux/futex.h> 25 #include <linux/futex.h>
25 26
26 #include "base/bind.h" 27 #include "base/bind.h"
27 #include "base/logging.h" 28 #include "base/logging.h"
28 #include "base/macros.h" 29 #include "base/macros.h"
29 #include "base/memory/scoped_ptr.h" 30 #include "base/memory/scoped_ptr.h"
30 #include "base/posix/eintr_wrapper.h" 31 #include "base/posix/eintr_wrapper.h"
31 #include "base/synchronization/waitable_event.h" 32 #include "base/synchronization/waitable_event.h"
32 #include "base/threading/thread.h" 33 #include "base/threading/thread.h"
33 #include "build/build_config.h" 34 #include "build/build_config.h"
34 #include "sandbox/linux/seccomp-bpf/bpf_tests.h" 35 #include "sandbox/linux/seccomp-bpf/bpf_tests.h"
35 #include "sandbox/linux/seccomp-bpf/die.h" 36 #include "sandbox/linux/seccomp-bpf/die.h"
36 #include "sandbox/linux/seccomp-bpf/linux_seccomp.h" 37 #include "sandbox/linux/seccomp-bpf/linux_seccomp.h"
38 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
37 #include "sandbox/linux/seccomp-bpf/syscall.h" 39 #include "sandbox/linux/seccomp-bpf/syscall.h"
38 #include "sandbox/linux/seccomp-bpf/trap.h" 40 #include "sandbox/linux/seccomp-bpf/trap.h"
39 #include "sandbox/linux/services/broker_process.h" 41 #include "sandbox/linux/services/broker_process.h"
40 #include "sandbox/linux/services/linux_syscalls.h" 42 #include "sandbox/linux/services/linux_syscalls.h"
41 #include "sandbox/linux/tests/scoped_temporary_file.h" 43 #include "sandbox/linux/tests/scoped_temporary_file.h"
42 #include "sandbox/linux/tests/unit_tests.h" 44 #include "sandbox/linux/tests/unit_tests.h"
43 #include "testing/gtest/include/gtest/gtest.h" 45 #include "testing/gtest/include/gtest/gtest.h"
44 46
45 // Workaround for Android's prctl.h file. 47 // Workaround for Android's prctl.h file.
46 #ifndef PR_GET_ENDIAN 48 #ifndef PR_GET_ENDIAN
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } 209 }
208 210
209 // A simple blacklist policy, with a SIGSYS handler 211 // A simple blacklist policy, with a SIGSYS handler
210 intptr_t EnomemHandler(const struct arch_seccomp_data& args, void* aux) { 212 intptr_t EnomemHandler(const struct arch_seccomp_data& args, void* aux) {
211 // We also check that the auxiliary data is correct 213 // We also check that the auxiliary data is correct
212 SANDBOX_ASSERT(aux); 214 SANDBOX_ASSERT(aux);
213 *(static_cast<int*>(aux)) = kExpectedReturnValue; 215 *(static_cast<int*>(aux)) = kExpectedReturnValue;
214 return -ENOMEM; 216 return -ENOMEM;
215 } 217 }
216 218
217 ErrorCode BlacklistNanosleepPolicySigsys(SandboxBPF* sandbox, 219 class BlacklistNanosleepTrapPolicy : public SandboxBPFDSLPolicy {
218 int sysno, 220 public:
219 int* aux) { 221 BlacklistNanosleepTrapPolicy(int* aux) : aux_(aux) {}
jln (very slow on Chromium) 2014/09/23 18:42:06 nit: explicit
mdempsky 2014/09/23 18:50:20 Done.
220 DCHECK(SandboxBPF::IsValidSyscallNumber(sysno)); 222 virtual ~BlacklistNanosleepTrapPolicy() {}
221 switch (sysno) { 223
222 case __NR_nanosleep: 224 virtual ResultExpr EvaluateSyscall(int sysno) const OVERRIDE {
223 return sandbox->Trap(EnomemHandler, aux); 225 DCHECK(SandboxBPF::IsValidSyscallNumber(sysno));
224 default: 226 switch (sysno) {
225 return ErrorCode(ErrorCode::ERR_ALLOWED); 227 case __NR_nanosleep:
228 return Trap(EnomemHandler, aux_);
229 default:
230 return Allow();
231 }
226 } 232 }
227 } 233
234 private:
235 int* aux_;
236
237 DISALLOW_COPY_AND_ASSIGN(BlacklistNanosleepTrapPolicy);
238 };
228 239
229 BPF_TEST(SandboxBPF, 240 BPF_TEST(SandboxBPF,
230 BasicBlacklistWithSigsys, 241 BasicBlacklistWithSigsys,
231 BlacklistNanosleepPolicySigsys, 242 BlacklistNanosleepTrapPolicy,
232 int /* (*BPF_AUX) */) { 243 int /* (*BPF_AUX) */) {
233 // getpid() should work properly 244 // getpid() should work properly
234 errno = 0; 245 errno = 0;
235 BPF_ASSERT(syscall(__NR_getpid) > 0); 246 BPF_ASSERT(syscall(__NR_getpid) > 0);
236 BPF_ASSERT(errno == 0); 247 BPF_ASSERT(errno == 0);
237 248
238 // Our Auxiliary Data, should be reset by the signal handler 249 // Our Auxiliary Data, should be reset by the signal handler
239 *BPF_AUX = -1; 250 *BPF_AUX = -1;
240 const struct timespec ts = {0, 0}; 251 const struct timespec ts = {0, 0};
241 BPF_ASSERT(syscall(__NR_nanosleep, &ts, NULL) == -1); 252 BPF_ASSERT(syscall(__NR_nanosleep, &ts, NULL) == -1);
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 509
499 // Verify that within the callback function all filtering is temporarily 510 // Verify that within the callback function all filtering is temporarily
500 // disabled. 511 // disabled.
501 BPF_ASSERT(syscall(__NR_getpid) > 1); 512 BPF_ASSERT(syscall(__NR_getpid) > 1);
502 513
503 // Verify that we can now call the underlying system call without causing 514 // Verify that we can now call the underlying system call without causing
504 // infinite recursion. 515 // infinite recursion.
505 return SandboxBPF::ForwardSyscall(args); 516 return SandboxBPF::ForwardSyscall(args);
506 } 517 }
507 518
508 ErrorCode GreyListedPolicy(SandboxBPF* sandbox, int sysno, int* aux) { 519 class GreyListedPolicy : public SandboxBPFDSLPolicy {
509 // Set the global environment for unsafe traps once. 520 public:
510 if (sysno == MIN_SYSCALL) { 521 GreyListedPolicy(int* aux) : aux_(aux) {
jln (very slow on Chromium) 2014/09/23 18:42:06 Nit: explicit
mdempsky 2014/09/23 18:50:19 Done.
522 // Set the global environment for unsafe traps once.
511 EnableUnsafeTraps(); 523 EnableUnsafeTraps();
512 } 524 }
525 virtual ~GreyListedPolicy() {}
513 526
514 // Some system calls must always be allowed, if our policy wants to make 527 virtual ResultExpr EvaluateSyscall(int sysno) const OVERRIDE {
515 // use of UnsafeTrap() 528 DCHECK(SandboxBPF::IsValidSyscallNumber(sysno));
516 if (SandboxBPF::IsRequiredForUnsafeTrap(sysno)) { 529 // Some system calls must always be allowed, if our policy wants to make
517 return ErrorCode(ErrorCode::ERR_ALLOWED); 530 // use of UnsafeTrap()
518 } else if (sysno == __NR_getpid) { 531 if (SandboxBPF::IsRequiredForUnsafeTrap(sysno)) {
519 // Disallow getpid() 532 return Allow();
520 return ErrorCode(EPERM); 533 } else if (sysno == __NR_getpid) {
521 } else if (SandboxBPF::IsValidSyscallNumber(sysno)) { 534 // Disallow getpid()
522 // Allow (and count) all other system calls. 535 return Error(EPERM);
523 return sandbox->UnsafeTrap(CountSyscalls, aux); 536 } else {
524 } else { 537 // Allow (and count) all other system calls.
525 return ErrorCode(ENOSYS); 538 return UnsafeTrap(CountSyscalls, aux_);
539 }
526 } 540 }
527 } 541
542 private:
543 int* aux_;
544
545 DISALLOW_COPY_AND_ASSIGN(GreyListedPolicy);
546 };
528 547
529 BPF_TEST(SandboxBPF, GreyListedPolicy, GreyListedPolicy, int /* (*BPF_AUX) */) { 548 BPF_TEST(SandboxBPF, GreyListedPolicy, GreyListedPolicy, int /* (*BPF_AUX) */) {
530 BPF_ASSERT(syscall(__NR_getpid) == -1); 549 BPF_ASSERT(syscall(__NR_getpid) == -1);
531 BPF_ASSERT(errno == EPERM); 550 BPF_ASSERT(errno == EPERM);
532 BPF_ASSERT(*BPF_AUX == 0); 551 BPF_ASSERT(*BPF_AUX == 0);
533 BPF_ASSERT(syscall(__NR_geteuid) == syscall(__NR_getuid)); 552 BPF_ASSERT(syscall(__NR_geteuid) == syscall(__NR_getuid));
534 BPF_ASSERT(*BPF_AUX == 2); 553 BPF_ASSERT(*BPF_AUX == 2);
535 char name[17] = {}; 554 char name[17] = {};
536 BPF_ASSERT(!syscall(__NR_prctl, 555 BPF_ASSERT(!syscall(__NR_prctl,
537 PR_GET_NAME, 556 PR_GET_NAME,
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 // the openat() system call. 796 // the openat() system call.
778 BPF_ASSERT(static_cast<int>(args.args[0]) == AT_FDCWD); 797 BPF_ASSERT(static_cast<int>(args.args[0]) == AT_FDCWD);
779 return broker_process->Open(reinterpret_cast<const char*>(args.args[1]), 798 return broker_process->Open(reinterpret_cast<const char*>(args.args[1]),
780 static_cast<int>(args.args[2])); 799 static_cast<int>(args.args[2]));
781 default: 800 default:
782 BPF_ASSERT(false); 801 BPF_ASSERT(false);
783 return -ENOSYS; 802 return -ENOSYS;
784 } 803 }
785 } 804 }
786 805
787 ErrorCode DenyOpenPolicy(SandboxBPF* sandbox, 806 class DenyOpenPolicy : public SandboxBPFDSLPolicy {
788 int sysno, 807 public:
789 InitializedOpenBroker* iob) { 808 DenyOpenPolicy(InitializedOpenBroker* iob) : iob_(iob) {}
jln (very slow on Chromium) 2014/09/23 18:42:06 nit: explicit
mdempsky 2014/09/23 18:50:19 Done.
790 if (!SandboxBPF::IsValidSyscallNumber(sysno)) { 809 virtual ~DenyOpenPolicy() {}
791 return ErrorCode(ENOSYS); 810
811 virtual ResultExpr EvaluateSyscall(int sysno) const OVERRIDE {
812 DCHECK(SandboxBPF::IsValidSyscallNumber(sysno));
813
814 switch (sysno) {
815 case __NR_faccessat:
816 #if defined(__NR_access)
817 case __NR_access:
818 #endif
819 #if defined(__NR_open)
820 case __NR_open:
821 #endif
822 case __NR_openat:
823 // We get a InitializedOpenBroker class, but our trap handler wants
824 // the BrokerProcess object.
825 return Trap(BrokerOpenTrapHandler, iob_->broker_process());
826 default:
827 return Allow();
828 }
792 } 829 }
793 830
794 switch (sysno) { 831 private:
795 case __NR_faccessat: 832 InitializedOpenBroker* iob_;
796 #if defined(__NR_access) 833
797 case __NR_access: 834 DISALLOW_COPY_AND_ASSIGN(DenyOpenPolicy);
798 #endif 835 };
799 #if defined(__NR_open)
800 case __NR_open:
801 #endif
802 case __NR_openat:
803 // We get a InitializedOpenBroker class, but our trap handler wants
804 // the BrokerProcess object.
805 return ErrorCode(
806 sandbox->Trap(BrokerOpenTrapHandler, iob->broker_process()));
807 default:
808 return ErrorCode(ErrorCode::ERR_ALLOWED);
809 }
810 }
811 836
812 // We use a InitializedOpenBroker class, so that we can run unsandboxed 837 // We use a InitializedOpenBroker class, so that we can run unsandboxed
813 // code in its constructor, which is the only way to do so in a BPF_TEST. 838 // code in its constructor, which is the only way to do so in a BPF_TEST.
814 BPF_TEST(SandboxBPF, 839 BPF_TEST(SandboxBPF,
815 UseOpenBroker, 840 UseOpenBroker,
816 DenyOpenPolicy, 841 DenyOpenPolicy,
817 InitializedOpenBroker /* (*BPF_AUX) */) { 842 InitializedOpenBroker /* (*BPF_AUX) */) {
818 BPF_ASSERT(BPF_AUX->initialized()); 843 BPF_ASSERT(BPF_AUX->initialized());
819 BrokerProcess* broker_process = BPF_AUX->broker_process(); 844 BrokerProcess* broker_process = BPF_AUX->broker_process();
820 BPF_ASSERT(broker_process != NULL); 845 BPF_ASSERT(broker_process != NULL);
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 } 974 }
950 975
951 ~EqualityStressTest() { 976 ~EqualityStressTest() {
952 for (std::vector<ArgValue*>::iterator iter = arg_values_.begin(); 977 for (std::vector<ArgValue*>::iterator iter = arg_values_.begin();
953 iter != arg_values_.end(); 978 iter != arg_values_.end();
954 ++iter) { 979 ++iter) {
955 DeleteArgValue(*iter); 980 DeleteArgValue(*iter);
956 } 981 }
957 } 982 }
958 983
959 ErrorCode Policy(SandboxBPF* sandbox, int sysno) { 984 ResultExpr Policy(int sysno) {
960 if (!SandboxBPF::IsValidSyscallNumber(sysno)) { 985 DCHECK(SandboxBPF::IsValidSyscallNumber(sysno));
961 // FIXME: we should really not have to do that in a trivial policy 986 if (sysno < 0 || sysno >= (int)arg_values_.size() ||
962 return ErrorCode(ENOSYS); 987 IsReservedSyscall(sysno)) {
963 } else if (sysno < 0 || sysno >= (int)arg_values_.size() ||
964 IsReservedSyscall(sysno)) {
965 // We only return ErrorCode values for the system calls that 988 // We only return ErrorCode values for the system calls that
966 // are part of our test data. Every other system call remains 989 // are part of our test data. Every other system call remains
967 // allowed. 990 // allowed.
968 return ErrorCode(ErrorCode::ERR_ALLOWED); 991 return Allow();
969 } else { 992 } else {
970 // ToErrorCode() turns an ArgValue object into an ErrorCode that is 993 // ToErrorCode() turns an ArgValue object into an ErrorCode that is
971 // suitable for use by a sandbox policy. 994 // suitable for use by a sandbox policy.
972 return ToErrorCode(sandbox, arg_values_[sysno]); 995 return ToErrorCode(arg_values_[sysno]);
973 } 996 }
974 } 997 }
975 998
976 void VerifyFilter() { 999 void VerifyFilter() {
977 // Iterate over all system calls. Skip the system calls that have 1000 // Iterate over all system calls. Skip the system calls that have
978 // previously been determined as being reserved. 1001 // previously been determined as being reserved.
979 for (int sysno = 0; sysno < (int)arg_values_.size(); ++sysno) { 1002 for (int sysno = 0; sysno < (int)arg_values_.size(); ++sysno) {
980 if (!arg_values_[sysno]) { 1003 if (!arg_values_[sysno]) {
981 // Skip reserved system calls. 1004 // Skip reserved system calls.
982 continue; 1005 continue;
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 } 1132 }
1110 delete[] arg_value->tests; 1133 delete[] arg_value->tests;
1111 } 1134 }
1112 if (!arg_value->err) { 1135 if (!arg_value->err) {
1113 DeleteArgValue(arg_value->arg_value); 1136 DeleteArgValue(arg_value->arg_value);
1114 } 1137 }
1115 delete arg_value; 1138 delete arg_value;
1116 } 1139 }
1117 } 1140 }
1118 1141
1119 ErrorCode ToErrorCode(SandboxBPF* sandbox, ArgValue* arg_value) { 1142 ResultExpr ToErrorCode(ArgValue* arg_value) {
1120 // Compute the ErrorCode that should be returned, if none of our 1143 // Compute the ResultExpr that should be returned, if none of our
1121 // tests succeed (i.e. the system call parameter doesn't match any 1144 // tests succeed (i.e. the system call parameter doesn't match any
1122 // of the values in arg_value->tests[].k_value). 1145 // of the values in arg_value->tests[].k_value).
1123 ErrorCode err; 1146 ResultExpr err;
1124 if (arg_value->err) { 1147 if (arg_value->err) {
1125 // If this was a leaf node, return the errno value that we expect to 1148 // If this was a leaf node, return the errno value that we expect to
1126 // return from the BPF filter program. 1149 // return from the BPF filter program.
1127 err = ErrorCode(arg_value->err); 1150 err = Error(arg_value->err);
1128 } else { 1151 } else {
1129 // If this wasn't a leaf node yet, recursively descend into the rest 1152 // If this wasn't a leaf node yet, recursively descend into the rest
1130 // of the tree. This will end up adding a few more SandboxBPF::Cond() 1153 // of the tree. This will end up adding a few more SandboxBPF::Cond()
1131 // tests to our ErrorCode. 1154 // tests to our ErrorCode.
1132 err = ToErrorCode(sandbox, arg_value->arg_value); 1155 err = ToErrorCode(arg_value->arg_value);
1133 } 1156 }
1134 1157
1135 // Now, iterate over all the test cases that we want to compare against. 1158 // Now, iterate over all the test cases that we want to compare against.
1136 // This builds a chain of SandboxBPF::Cond() tests 1159 // This builds a chain of SandboxBPF::Cond() tests
1137 // (aka "if ... elif ... elif ... elif ... fi") 1160 // (aka "if ... elif ... elif ... elif ... fi")
1138 for (int n = arg_value->size; n-- > 0;) { 1161 for (int n = arg_value->size; n-- > 0;) {
1139 ErrorCode matched; 1162 ResultExpr matched;
1140 // Again, we distinguish between leaf nodes and subtrees. 1163 // Again, we distinguish between leaf nodes and subtrees.
1141 if (arg_value->tests[n].err) { 1164 if (arg_value->tests[n].err) {
1142 matched = ErrorCode(arg_value->tests[n].err); 1165 matched = Error(arg_value->tests[n].err);
1143 } else { 1166 } else {
1144 matched = ToErrorCode(sandbox, arg_value->tests[n].arg_value); 1167 matched = ToErrorCode(arg_value->tests[n].arg_value);
1145 } 1168 }
1146 // For now, all of our tests are limited to 32bit. 1169 // For now, all of our tests are limited to 32bit.
1147 // We have separate tests that check the behavior of 32bit vs. 64bit 1170 // We have separate tests that check the behavior of 32bit vs. 64bit
1148 // conditional expressions. 1171 // conditional expressions.
1149 err = sandbox->Cond(arg_value->argno, 1172 const Arg<uint32_t> arg(arg_value->argno);
1150 ErrorCode::TP_32BIT, 1173 err = If(arg == arg_value->tests[n].k_value, matched).Else(err);
1151 ErrorCode::OP_EQUAL,
1152 arg_value->tests[n].k_value,
1153 matched,
1154 err);
1155 } 1174 }
1156 return err; 1175 return err;
1157 } 1176 }
1158 1177
1159 void Verify(int sysno, intptr_t* args, const ArgValue& arg_value) { 1178 void Verify(int sysno, intptr_t* args, const ArgValue& arg_value) {
1160 uint32_t mismatched = 0; 1179 uint32_t mismatched = 0;
1161 // Iterate over all the k_values in arg_value.tests[] and verify that 1180 // Iterate over all the k_values in arg_value.tests[] and verify that
1162 // we see the expected return values from system calls, when we pass 1181 // we see the expected return values from system calls, when we pass
1163 // the k_value as a parameter in a system call. 1182 // the k_value as a parameter in a system call.
1164 for (int n = arg_value.size; n-- > 0;) { 1183 for (int n = arg_value.size; n-- > 0;) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 // increased too much, the test will start failing. 1233 // increased too much, the test will start failing.
1215 #if defined(__aarch64__) 1234 #if defined(__aarch64__)
1216 static const int kNumTestCases = 30; 1235 static const int kNumTestCases = 30;
1217 #else 1236 #else
1218 static const int kNumTestCases = 40; 1237 static const int kNumTestCases = 40;
1219 #endif 1238 #endif
1220 static const int kMaxFanOut = 3; 1239 static const int kMaxFanOut = 3;
1221 static const int kMaxArgs = 6; 1240 static const int kMaxArgs = 6;
1222 }; 1241 };
1223 1242
1224 ErrorCode EqualityStressTestPolicy(SandboxBPF* sandbox, 1243 class EqualityStressTestPolicy : public SandboxBPFDSLPolicy {
1225 int sysno, 1244 public:
1226 EqualityStressTest* aux) { 1245 EqualityStressTestPolicy(EqualityStressTest* aux) : aux_(aux) {}
jln (very slow on Chromium) 2014/09/23 18:42:06 nit: explicit
mdempsky 2014/09/23 18:50:19 Done.
1227 DCHECK(aux); 1246 virtual ~EqualityStressTestPolicy() {}
1228 return aux->Policy(sandbox, sysno); 1247
1229 } 1248 virtual ResultExpr EvaluateSyscall(int sysno) const OVERRIDE {
1249 return aux_->Policy(sysno);
1250 }
1251
1252 private:
1253 EqualityStressTest* aux_;
1254
1255 DISALLOW_COPY_AND_ASSIGN(EqualityStressTestPolicy);
1256 };
1230 1257
1231 BPF_TEST(SandboxBPF, 1258 BPF_TEST(SandboxBPF,
1232 EqualityTests, 1259 EqualityTests,
1233 EqualityStressTestPolicy, 1260 EqualityStressTestPolicy,
1234 EqualityStressTest /* (*BPF_AUX) */) { 1261 EqualityStressTest /* (*BPF_AUX) */) {
1235 BPF_AUX->VerifyFilter(); 1262 BPF_AUX->VerifyFilter();
1236 } 1263 }
1237 1264
1238 class EqualityArgumentWidthPolicy : public SandboxBPFDSLPolicy { 1265 class EqualityArgumentWidthPolicy : public SandboxBPFDSLPolicy {
1239 public: 1266 public:
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after
2362 BPF_ASSERT_EQ(ENOSYS, errno); 2389 BPF_ASSERT_EQ(ENOSYS, errno);
2363 2390
2364 BPF_ASSERT_EQ(-1, syscall(__NR_setgid, 300)); 2391 BPF_ASSERT_EQ(-1, syscall(__NR_setgid, 300));
2365 BPF_ASSERT_EQ(EPERM, errno); 2392 BPF_ASSERT_EQ(EPERM, errno);
2366 } 2393 }
2367 2394
2368 } // namespace 2395 } // namespace
2369 2396
2370 } // namespace bpf_dsl 2397 } // namespace bpf_dsl
2371 } // namespace sandbox 2398 } // namespace sandbox
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698