diff options
author | mdempsky@chromium.org <mdempsky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-09 22:35:48 +0000 |
---|---|---|
committer | mdempsky@chromium.org <mdempsky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-09 22:35:48 +0000 |
commit | 92028f1406eeb252247b55b8db63b1b8cdf69945 (patch) | |
tree | fcf63ed1608ceec1cac79ae5585b5a7a66558781 /sandbox | |
parent | 9fc4161a5ab28f83d8323407d0230cade19634c3 (diff) | |
download | chromium_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')
-rw-r--r-- | sandbox/linux/sandbox_linux.gypi | 1 | ||||
-rw-r--r-- | sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.cc | 21 | ||||
-rw-r--r-- | sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.h | 54 |
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_ |