summaryrefslogtreecommitdiffstats
path: root/sandbox/linux
diff options
context:
space:
mode:
authormdempsky@chromium.org <mdempsky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-09 22:35:48 +0000
committermdempsky@chromium.org <mdempsky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-09 22:35:48 +0000
commit92028f1406eeb252247b55b8db63b1b8cdf69945 (patch)
treefcf63ed1608ceec1cac79ae5585b5a7a66558781 /sandbox/linux
parent9fc4161a5ab28f83d8323407d0230cade19634c3 (diff)
downloadchromium_src-92028f1406eeb252247b55b8db63b1b8cdf69945.zip
chromium_src-92028f1406eeb252247b55b8db63b1b8cdf69945.tar.gz
chromium_src-92028f1406eeb252247b55b8db63b1b8cdf69945.tar.bz2
Refactor BPFTesterCompatibilityDelegate to use AuxHolder instead
Review URL: https://codereview.chromium.org/271943002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269442 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sandbox/linux')
-rw-r--r--sandbox/linux/sandbox_linux.gypi1
-rw-r--r--sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.cc21
-rw-r--r--sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h54
3 files changed, 31 insertions, 45 deletions
diff --git a/sandbox/linux/sandbox_linux.gypi b/sandbox/linux/sandbox_linux.gypi
index e86345e..0fdb6ba 100644
--- a/sandbox/linux/sandbox_linux.gypi
+++ b/sandbox/linux/sandbox_linux.gypi
@@ -77,7 +77,6 @@
'conditions': [
[ 'use_seccomp_bpf==1', {
'sources': [
- 'seccomp-bpf/bpf_tester_compatibility_delegate.cc',
'seccomp-bpf/bpf_tester_compatibility_delegate.h',
'seccomp-bpf/bpf_tests.h',
'seccomp-bpf/sandbox_bpf_test_runner.cc',
diff --git a/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.cc b/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.cc
deleted file mode 100644
index 2fa209b..0000000
--- a/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h"
-
-namespace sandbox {
-
-// static
-template <>
-void* BPFTesterCompatibilityDelegate<void>::NewAux() {
- return NULL;
-}
-
-// static
-template <>
-void BPFTesterCompatibilityDelegate<void>::DeleteAux(void* aux) {
- CHECK(!aux);
-}
-
-} // namespace sandbox
diff --git a/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h b/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h
index c211d04..5c2f341 100644
--- a/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h
+++ b/sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h
@@ -17,6 +17,30 @@
namespace sandbox {
+namespace internal {
+
+// Internal helper class to hold a value of type T.
+template <typename T>
+class AuxHolder {
+ public:
+ AuxHolder() : val_() {}
+ T* get() { return &val_; }
+
+ private:
+ T val_;
+};
+
+// Specialization of AuxHolder for void.
+// Returns a null pointer instead of allocating void.
+template <>
+class AuxHolder<void> {
+ public:
+ AuxHolder() {}
+ void* get() { return NULL; }
+};
+
+} // namespace internal
+
// This templated class allows building a BPFTesterDelegate from a
// deprecated-style BPF policy (that is a SyscallEvaluator function pointer,
// instead of a SandboxBPFPolicy class), specified in |policy_function| and a
@@ -31,51 +55,35 @@ class BPFTesterCompatibilityDelegate : public BPFTesterDelegate {
BPFTesterCompatibilityDelegate(
void (*test_function)(AuxType*),
typename CompatibilityPolicy<AuxType>::SyscallEvaluator policy_function)
- : aux_pointer_for_policy_(NULL),
+ : aux_holder_(),
test_function_(test_function),
- policy_function_(policy_function) {
- // This will be NULL iff AuxType is void.
- aux_pointer_for_policy_ = NewAux();
- }
+ policy_function_(policy_function) {}
- virtual ~BPFTesterCompatibilityDelegate() {
- DeleteAux(aux_pointer_for_policy_);
- }
+ virtual ~BPFTesterCompatibilityDelegate() {}
virtual scoped_ptr<SandboxBPFPolicy> GetSandboxBPFPolicy() OVERRIDE {
// The current method is guaranteed to only run in the child process
// running the test. In this process, the current object is guaranteed
// to live forever. So it's ok to pass aux_pointer_for_policy_ to
// the policy, which could in turn pass it to the kernel via Trap().
- return scoped_ptr<SandboxBPFPolicy>(new CompatibilityPolicy<AuxType>(
- policy_function_, aux_pointer_for_policy_));
+ return scoped_ptr<SandboxBPFPolicy>(
+ new CompatibilityPolicy<AuxType>(policy_function_, aux_holder_.get()));
}
virtual void RunTestFunction() OVERRIDE {
// Run the actual test.
// The current object is guaranteed to live forever in the child process
// where this will run.
- test_function_(aux_pointer_for_policy_);
+ test_function_(aux_holder_.get());
}
private:
- // Allocate an object of type Aux. This is specialized to return NULL when
- // trying to allocate a void.
- static Aux* NewAux() { return new Aux(); }
- static void DeleteAux(Aux* aux) { delete aux; }
-
- AuxType* aux_pointer_for_policy_;
+ internal::AuxHolder<AuxType> aux_holder_;
void (*test_function_)(AuxType*);
typename CompatibilityPolicy<AuxType>::SyscallEvaluator policy_function_;
DISALLOW_COPY_AND_ASSIGN(BPFTesterCompatibilityDelegate);
};
-// Specialization of NewAux that returns NULL;
-template <>
-void* BPFTesterCompatibilityDelegate<void>::NewAux();
-template <>
-void BPFTesterCompatibilityDelegate<void>::DeleteAux(void* aux);
-
} // namespace sandbox
#endif // SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_