| Index: sandbox/linux/seccomp-bpf/bpf_tests.h
|
| diff --git a/sandbox/linux/seccomp-bpf/bpf_tests.h b/sandbox/linux/seccomp-bpf/bpf_tests.h
|
| index 8da25f99a5f8b9f0617b51d9f7043d803465b02d..3ac631ca4bec8ba485b32e58315aaebe280d25bb 100644
|
| --- a/sandbox/linux/seccomp-bpf/bpf_tests.h
|
| +++ b/sandbox/linux/seccomp-bpf/bpf_tests.h
|
| @@ -11,6 +11,19 @@
|
|
|
| namespace sandbox {
|
|
|
| +// A BPF_DEATH_TEST is just the same as a BPF_TEST, but it assumes that the
|
| +// test will fail with a particular known error condition. Use the DEATH_XXX()
|
| +// macros from unit_tests.h to specify the expected error condition.
|
| +#define BPF_DEATH_TEST(test_case_name, test_name, death, policy, aux...) \
|
| + void BPF_TEST_##test_name(sandbox::BpfTests<aux>::AuxType& BPF_AUX); \
|
| + TEST(test_case_name, test_name) { \
|
| + sandbox::BpfTests<aux>::TestArgs arg(BPF_TEST_##test_name, policy); \
|
| + sandbox::BpfTests<aux>::RunTestInProcess( \
|
| + sandbox::BpfTests<aux>::TestWrapper, &arg, \
|
| + death); \
|
| + } \
|
| + void BPF_TEST_##test_name(sandbox::BpfTests<aux>::AuxType& BPF_AUX)
|
| +
|
| // BPF_TEST() is a special version of SANDBOX_TEST(). It turns into a no-op,
|
| // if the host does not have kernel support for running BPF filters.
|
| // Also, it takes advantage of the Die class to avoid calling LOG(FATAL), from
|
| @@ -22,13 +35,8 @@ namespace sandbox {
|
| // would typically use it as an argument to Sandbox::Trap(), if they want to
|
| // communicate data between the BPF_TEST() and a Trap() function.
|
| #define BPF_TEST(test_case_name, test_name, policy, aux...) \
|
| - void BPF_TEST_##test_name(sandbox::BpfTests<aux>::AuxType& BPF_AUX); \
|
| - TEST(test_case_name, test_name) { \
|
| - sandbox::BpfTests<aux>::TestArgs arg(BPF_TEST_##test_name, policy); \
|
| - sandbox::BpfTests<aux>::RunTestInProcess( \
|
| - sandbox::BpfTests<aux>::TestWrapper, &arg);\
|
| - } \
|
| - void BPF_TEST_##test_name(sandbox::BpfTests<aux>::AuxType& BPF_AUX)
|
| + BPF_DEATH_TEST(test_case_name, test_name, DEATH_SUCCESS(), policy, aux)
|
| +
|
|
|
| // Assertions are handled exactly the same as with a normal SANDBOX_TEST()
|
| #define BPF_ASSERT SANDBOX_ASSERT
|
| @@ -64,24 +72,25 @@ class BpfTests : public UnitTests {
|
| static void TestWrapper(void *void_arg) {
|
| TestArgs *arg = reinterpret_cast<TestArgs *>(void_arg);
|
| playground2::Die::EnableSimpleExit();
|
| - if (playground2::Sandbox::supportsSeccompSandbox(-1) ==
|
| + if (playground2::Sandbox::SupportsSeccompSandbox(-1) ==
|
| playground2::Sandbox::STATUS_AVAILABLE) {
|
| // Ensure the the sandbox is actually available at this time
|
| int proc_fd;
|
| BPF_ASSERT((proc_fd = open("/proc", O_RDONLY|O_DIRECTORY)) >= 0);
|
| - BPF_ASSERT(playground2::Sandbox::supportsSeccompSandbox(proc_fd) ==
|
| + BPF_ASSERT(playground2::Sandbox::SupportsSeccompSandbox(proc_fd) ==
|
| playground2::Sandbox::STATUS_AVAILABLE);
|
|
|
| // Initialize and then start the sandbox with our custom policy
|
| - playground2::Sandbox::setProcFd(proc_fd);
|
| - playground2::Sandbox::setSandboxPolicy(arg->policy(), &arg->aux_);
|
| - playground2::Sandbox::startSandbox();
|
| + playground2::Sandbox::set_proc_fd(proc_fd);
|
| + playground2::Sandbox::SetSandboxPolicy(arg->policy(), &arg->aux_);
|
| + playground2::Sandbox::StartSandbox();
|
|
|
| arg->test()(arg->aux_);
|
| } else {
|
| // TODO(markus): (crbug.com/141545) Call the compiler and verify the
|
| // policy. That's the least we can do, if we don't have kernel support.
|
| - playground2::Sandbox::setSandboxPolicy(arg->policy(), NULL);
|
| + playground2::Sandbox::SetSandboxPolicy(arg->policy(), NULL);
|
| + sandbox::UnitTests::IgnoreThisTest();
|
| }
|
| }
|
|
|
|
|