Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_ | |
| 6 #define SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_ | |
| 7 | |
| 8 #include <fcntl.h> | |
| 9 #include <sys/stat.h> | |
| 10 #include <sys/types.h> | |
| 11 | |
| 12 #include "base/memory/scoped_ptr.h" | |
| 13 #include "sandbox/linux/seccomp-bpf/sandbox_bpf_compatibility_policy.h" | |
| 14 #include "sandbox/linux/seccomp-bpf/sandbox_bpf_test_runner.h" | |
| 15 #include "sandbox/linux/tests/sandbox_test_runner.h" | |
| 16 #include "sandbox/linux/tests/unit_tests.h" | |
| 17 | |
| 18 namespace sandbox { | |
| 19 | |
| 20 // This templated class allows to build a BPFTesterDelegate from a | |
|
jln (very slow on Chromium)
2014/05/07 00:25:10
This comment is new.
mdempsky
2014/05/07 00:57:39
I'd say "allows building" instead of "allows to bu
jln (very slow on Chromium)
2014/05/07 01:07:37
Done.
| |
| 21 // deprecated-style BPF policy (that is a SyscallEvaluator function pointer, | |
| 22 // instead of a SandboxBPFPolicy class), specified in |policy_function| and a | |
| 23 // function pointer to a test in |test_function|. | |
| 24 // This allows both the policy and the test function to take a pointer to an | |
| 25 // object of type "Aux" as a parameter. This is used to implement the BPF_TEST | |
| 26 // macro and should generally not be used directly. | |
| 27 template <class Aux = void> | |
|
jln (very slow on Chromium)
2014/05/07 00:25:10
This is code moving without changes.
| |
| 28 class BPFTesterCompatibilityDelegate : public BPFTesterDelegate { | |
| 29 public: | |
| 30 typedef Aux AuxType; | |
| 31 BPFTesterCompatibilityDelegate( | |
| 32 void (*test_function)(AuxType*), | |
| 33 typename CompatibilityPolicy<AuxType>::SyscallEvaluator policy_function) | |
| 34 : aux_pointer_for_policy_(NULL), | |
| 35 test_function_(test_function), | |
| 36 policy_function_(policy_function) { | |
| 37 // This will be NULL iff AuxType is void. | |
| 38 aux_pointer_for_policy_ = NewAux(); | |
| 39 } | |
| 40 | |
| 41 virtual ~BPFTesterCompatibilityDelegate() { | |
| 42 DeleteAux(aux_pointer_for_policy_); | |
| 43 } | |
| 44 | |
| 45 virtual scoped_ptr<SandboxBPFPolicy> GetSandboxBPFPolicy() OVERRIDE { | |
| 46 // The current method is guaranteed to only run in the child process | |
| 47 // running the test. In this process, the current object is guaranteed | |
| 48 // to live forever. So it's ok to pass aux_pointer_for_policy_ to | |
| 49 // the policy, which could in turn pass it to the kernel via Trap(). | |
| 50 return scoped_ptr<SandboxBPFPolicy>(new CompatibilityPolicy<AuxType>( | |
| 51 policy_function_, aux_pointer_for_policy_)); | |
| 52 } | |
| 53 | |
| 54 virtual void RunTestFunction() OVERRIDE { | |
| 55 // Run the actual test. | |
| 56 // The current object is guaranteed to live forever in the child process | |
| 57 // where this will run. | |
| 58 test_function_(aux_pointer_for_policy_); | |
| 59 } | |
| 60 | |
| 61 private: | |
| 62 // Allocate an object of type Aux. This is specialized to return NULL when | |
| 63 // trying to allocate a void. | |
| 64 static Aux* NewAux() { return new Aux(); } | |
| 65 static void DeleteAux(Aux* aux) { delete aux; } | |
| 66 | |
| 67 AuxType* aux_pointer_for_policy_; | |
| 68 void (*test_function_)(AuxType*); | |
| 69 typename CompatibilityPolicy<AuxType>::SyscallEvaluator policy_function_; | |
| 70 DISALLOW_COPY_AND_ASSIGN(BPFTesterCompatibilityDelegate); | |
| 71 }; | |
| 72 | |
| 73 // Specialization of NewAux that returns NULL; | |
| 74 template <> | |
| 75 void* BPFTesterCompatibilityDelegate<void>::NewAux(); | |
| 76 template <> | |
| 77 void BPFTesterCompatibilityDelegate<void>::DeleteAux(void* aux); | |
| 78 | |
| 79 } // namespace sandbox | |
| 80 | |
| 81 #endif // SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_ | |
| OLD | NEW |