From 92028f1406eeb252247b55b8db63b1b8cdf69945 Mon Sep 17 00:00:00 2001 From: "mdempsky@chromium.org" Date: Fri, 9 May 2014 22:35:48 +0000 Subject: 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 --- sandbox/linux/sandbox_linux.gypi | 1 - .../bpf_tester_compatibility_delegate.cc | 21 --------- .../bpf_tester_compatibility_delegate.h | 54 +++++++++++++--------- 3 files changed, 31 insertions(+), 45 deletions(-) delete mode 100644 sandbox/linux/seccomp-bpf/bpf_tester_compatibility_delegate.cc (limited to 'sandbox/linux') 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::NewAux() { - return NULL; -} - -// static -template <> -void BPFTesterCompatibilityDelegate::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 +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 { + 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::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 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(new CompatibilityPolicy( - policy_function_, aux_pointer_for_policy_)); + return scoped_ptr( + new CompatibilityPolicy(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 aux_holder_; void (*test_function_)(AuxType*); typename CompatibilityPolicy::SyscallEvaluator policy_function_; DISALLOW_COPY_AND_ASSIGN(BPFTesterCompatibilityDelegate); }; -// Specialization of NewAux that returns NULL; -template <> -void* BPFTesterCompatibilityDelegate::NewAux(); -template <> -void BPFTesterCompatibilityDelegate::DeleteAux(void* aux); - } // namespace sandbox #endif // SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_ -- cgit v1.1