Commit 4dd21732 authored by mdempsky's avatar mdempsky Committed by Commit bot

Remove more dependencies on sandbox/linux/seccomp-bpf

This started out as simply converting NaCl's baseline policy to bpf_dsl,
but that led me down the rabbit hole of converting a bunch of remaining
uses of SandboxBPFPolicy within content too.  There are still a few
lingering dependencies on sandbox_bpf.h after this CL, but not many.

BUG=414363

Review URL: https://codereview.chromium.org/570763002

Cr-Commit-Position: refs/heads/master@{#294871}
parent 36816846
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include "sandbox/linux/bpf_dsl/bpf_dsl.h" #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
#include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
#if defined(__arm__) && !defined(MAP_STACK) #if defined(__arm__) && !defined(MAP_STACK)
...@@ -304,7 +303,7 @@ ResultExpr NaClNonSfiBPFSandboxPolicy::InvalidSyscall() const { ...@@ -304,7 +303,7 @@ ResultExpr NaClNonSfiBPFSandboxPolicy::InvalidSyscall() const {
bool InitializeBPFSandbox() { bool InitializeBPFSandbox() {
bool sandbox_is_initialized = content::InitializeSandbox( bool sandbox_is_initialized = content::InitializeSandbox(
scoped_ptr<sandbox::SandboxBPFPolicy>( scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>(
new nacl::nonsfi::NaClNonSfiBPFSandboxPolicy())); new nacl::nonsfi::NaClNonSfiBPFSandboxPolicy()));
if (!sandbox_is_initialized) if (!sandbox_is_initialized)
return false; return false;
......
...@@ -18,8 +18,7 @@ ...@@ -18,8 +18,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "content/public/common/sandbox_init.h" #include "content/public/common/sandbox_init.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
#endif // defined(USE_SECCOMP_BPF) #endif // defined(USE_SECCOMP_BPF)
...@@ -30,27 +29,28 @@ namespace nacl { ...@@ -30,27 +29,28 @@ namespace nacl {
namespace { namespace {
class NaClBPFSandboxPolicy : public sandbox::SandboxBPFPolicy { using sandbox::bpf_dsl::Allow;
using sandbox::bpf_dsl::Error;
using sandbox::bpf_dsl::ResultExpr;
class NaClBPFSandboxPolicy : public sandbox::bpf_dsl::SandboxBPFDSLPolicy {
public: public:
NaClBPFSandboxPolicy() NaClBPFSandboxPolicy()
: baseline_policy_(content::GetBPFSandboxBaselinePolicy()) {} : baseline_policy_(content::GetBPFSandboxBaselinePolicy()) {}
virtual ~NaClBPFSandboxPolicy() {} virtual ~NaClBPFSandboxPolicy() {}
virtual sandbox::ErrorCode EvaluateSyscall( virtual ResultExpr EvaluateSyscall(int system_call_number) const OVERRIDE;
sandbox::SandboxBPF* sandbox_compiler, virtual ResultExpr InvalidSyscall() const OVERRIDE {
int system_call_number) const OVERRIDE; return baseline_policy_->InvalidSyscall();
virtual sandbox::ErrorCode InvalidSyscall(
sandbox::SandboxBPF* sandbox_compiler) const OVERRIDE {
return baseline_policy_->InvalidSyscall(sandbox_compiler);
} }
private: private:
scoped_ptr<sandbox::SandboxBPFPolicy> baseline_policy_; scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy> baseline_policy_;
DISALLOW_COPY_AND_ASSIGN(NaClBPFSandboxPolicy); DISALLOW_COPY_AND_ASSIGN(NaClBPFSandboxPolicy);
}; };
sandbox::ErrorCode NaClBPFSandboxPolicy::EvaluateSyscall( ResultExpr NaClBPFSandboxPolicy::EvaluateSyscall(int sysno) const {
sandbox::SandboxBPF* sb, int sysno) const {
DCHECK(baseline_policy_); DCHECK(baseline_policy_);
switch (sysno) { switch (sysno) {
// TODO(jln): NaCl's GDB debug stub uses the following socket system calls, // TODO(jln): NaCl's GDB debug stub uses the following socket system calls,
...@@ -98,16 +98,16 @@ sandbox::ErrorCode NaClBPFSandboxPolicy::EvaluateSyscall( ...@@ -98,16 +98,16 @@ sandbox::ErrorCode NaClBPFSandboxPolicy::EvaluateSyscall(
// See crbug.com/264856 for details. // See crbug.com/264856 for details.
case __NR_times: case __NR_times:
case __NR_uname: case __NR_uname:
return sandbox::ErrorCode(sandbox::ErrorCode::ERR_ALLOWED); return Allow();
case __NR_ioctl: case __NR_ioctl:
case __NR_ptrace: case __NR_ptrace:
return sandbox::ErrorCode(EPERM); return Error(EPERM);
default: default:
return baseline_policy_->EvaluateSyscall(sb, sysno); return baseline_policy_->EvaluateSyscall(sysno);
} }
NOTREACHED(); NOTREACHED();
// GCC wants this. // GCC wants this.
return sandbox::ErrorCode(EPERM); return Error(EPERM);
} }
void RunSandboxSanityChecks() { void RunSandboxSanityChecks() {
...@@ -130,7 +130,8 @@ void RunSandboxSanityChecks() { ...@@ -130,7 +130,8 @@ void RunSandboxSanityChecks() {
bool InitializeBPFSandbox() { bool InitializeBPFSandbox() {
#if defined(USE_SECCOMP_BPF) #if defined(USE_SECCOMP_BPF)
bool sandbox_is_initialized = content::InitializeSandbox( bool sandbox_is_initialized = content::InitializeSandbox(
scoped_ptr<sandbox::SandboxBPFPolicy>(new NaClBPFSandboxPolicy)); scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>(
new NaClBPFSandboxPolicy));
if (sandbox_is_initialized) { if (sandbox_is_initialized) {
RunSandboxSanityChecks(); RunSandboxSanityChecks();
return true; return true;
......
...@@ -4,10 +4,9 @@ ...@@ -4,10 +4,9 @@
#include "content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.h" #include "content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.h"
#include <sys/syscall.h>
#include <sys/types.h> #include <sys/types.h>
#include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
using sandbox::bpf_dsl::Allow; using sandbox::bpf_dsl::Allow;
using sandbox::bpf_dsl::ResultExpr; using sandbox::bpf_dsl::ResultExpr;
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h" #include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h"
#include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h" #include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
using sandbox::SyscallSets; using sandbox::SyscallSets;
...@@ -97,7 +96,7 @@ void AddArmGpuWhitelist(std::vector<std::string>* read_whitelist, ...@@ -97,7 +96,7 @@ void AddArmGpuWhitelist(std::vector<std::string>* read_whitelist,
class CrosArmGpuBrokerProcessPolicy : public CrosArmGpuProcessPolicy { class CrosArmGpuBrokerProcessPolicy : public CrosArmGpuProcessPolicy {
public: public:
static sandbox::SandboxBPFPolicy* Create() { static sandbox::bpf_dsl::SandboxBPFDSLPolicy* Create() {
return new CrosArmGpuBrokerProcessPolicy(); return new CrosArmGpuBrokerProcessPolicy();
} }
virtual ~CrosArmGpuBrokerProcessPolicy() {} virtual ~CrosArmGpuBrokerProcessPolicy() {}
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include "content/common/set_process_title.h" #include "content/common/set_process_title.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" // for arch_seccomp_data
#include "sandbox/linux/services/broker_process.h" #include "sandbox/linux/services/broker_process.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
...@@ -117,7 +117,7 @@ intptr_t GpuSIGSYS_Handler(const struct arch_seccomp_data& args, ...@@ -117,7 +117,7 @@ intptr_t GpuSIGSYS_Handler(const struct arch_seccomp_data& args,
class GpuBrokerProcessPolicy : public GpuProcessPolicy { class GpuBrokerProcessPolicy : public GpuProcessPolicy {
public: public:
static sandbox::SandboxBPFPolicy* Create() { static sandbox::bpf_dsl::SandboxBPFDSLPolicy* Create() {
return new GpuBrokerProcessPolicy(); return new GpuBrokerProcessPolicy();
} }
virtual ~GpuBrokerProcessPolicy() {} virtual ~GpuBrokerProcessPolicy() {}
...@@ -158,8 +158,8 @@ void UpdateProcessTypeToGpuBroker() { ...@@ -158,8 +158,8 @@ void UpdateProcessTypeToGpuBroker() {
SetProcessTitleFromCommandLine(NULL); SetProcessTitleFromCommandLine(NULL);
} }
bool UpdateProcessTypeAndEnableSandbox( bool UpdateProcessTypeAndEnableSandbox(sandbox::bpf_dsl::SandboxBPFDSLPolicy* (
sandbox::SandboxBPFPolicy* (*broker_sandboxer_allocator)(void)) { *broker_sandboxer_allocator)(void)) {
DCHECK(broker_sandboxer_allocator); DCHECK(broker_sandboxer_allocator);
UpdateProcessTypeToGpuBroker(); UpdateProcessTypeToGpuBroker();
return SandboxSeccompBPF::StartSandboxWithExternalPolicy( return SandboxSeccompBPF::StartSandboxWithExternalPolicy(
...@@ -240,7 +240,7 @@ bool GpuProcessPolicy::PreSandboxHook() { ...@@ -240,7 +240,7 @@ bool GpuProcessPolicy::PreSandboxHook() {
} }
void GpuProcessPolicy::InitGpuBrokerProcess( void GpuProcessPolicy::InitGpuBrokerProcess(
sandbox::SandboxBPFPolicy* (*broker_sandboxer_allocator)(void), sandbox::bpf_dsl::SandboxBPFDSLPolicy* (*broker_sandboxer_allocator)(void),
const std::vector<std::string>& read_whitelist_extra, const std::vector<std::string>& read_whitelist_extra,
const std::vector<std::string>& write_whitelist_extra) { const std::vector<std::string>& write_whitelist_extra) {
static const char kDriRcPath[] = "/etc/drirc"; static const char kDriRcPath[] = "/etc/drirc";
......
...@@ -35,7 +35,8 @@ class GpuProcessPolicy : public SandboxBPFBasePolicy { ...@@ -35,7 +35,8 @@ class GpuProcessPolicy : public SandboxBPFBasePolicy {
// names that should be whitelisted by the broker process, in addition to // names that should be whitelisted by the broker process, in addition to
// the basic ones. // the basic ones.
void InitGpuBrokerProcess( void InitGpuBrokerProcess(
sandbox::SandboxBPFPolicy* (*broker_sandboxer_allocator)(void), sandbox::bpf_dsl::SandboxBPFDSLPolicy* (*broker_sandboxer_allocator)(
void),
const std::vector<std::string>& read_whitelist_extra, const std::vector<std::string>& read_whitelist_extra,
const std::vector<std::string>& write_whitelist_extra); const std::vector<std::string>& write_whitelist_extra);
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "content/common/sandbox_linux/sandbox_linux.h" #include "content/common/sandbox_linux/sandbox_linux.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
using sandbox::SyscallSets; using sandbox::SyscallSets;
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "content/common/sandbox_linux/sandbox_linux.h" #include "content/common/sandbox_linux/sandbox_linux.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
using sandbox::SyscallSets; using sandbox::SyscallSets;
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "content/common/sandbox_linux/sandbox_linux.h" #include "content/common/sandbox_linux/sandbox_linux.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h"
#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
#include "sandbox/linux/services/linux_syscalls.h" #include "sandbox/linux/services/linux_syscalls.h"
using sandbox::SyscallSets; using sandbox::SyscallSets;
......
...@@ -6,15 +6,17 @@ ...@@ -6,15 +6,17 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h" #include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h" #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
namespace content { namespace content {
bool InitializeSandbox(scoped_ptr<sandbox::SandboxBPFPolicy> policy) { bool InitializeSandbox(
scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy> policy) {
return SandboxSeccompBPF::StartSandboxWithExternalPolicy(policy.Pass()); return SandboxSeccompBPF::StartSandboxWithExternalPolicy(policy.Pass());
} }
scoped_ptr<sandbox::SandboxBPFPolicy> GetBPFSandboxBaselinePolicy() { scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>
GetBPFSandboxBaselinePolicy() {
return SandboxSeccompBPF::GetBaselinePolicy().Pass(); return SandboxSeccompBPF::GetBaselinePolicy().Pass();
} }
......
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
#include <fcntl.h> #include <fcntl.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/types.h> #include <sys/types.h>
#include "base/basictypes.h" #include "base/basictypes.h"
...@@ -17,7 +15,7 @@ ...@@ -17,7 +15,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h" #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
#if defined(USE_SECCOMP_BPF) #if defined(USE_SECCOMP_BPF)
...@@ -274,7 +272,7 @@ bool SandboxSeccompBPF::StartSandbox(const std::string& process_type) { ...@@ -274,7 +272,7 @@ bool SandboxSeccompBPF::StartSandbox(const std::string& process_type) {
} }
bool SandboxSeccompBPF::StartSandboxWithExternalPolicy( bool SandboxSeccompBPF::StartSandboxWithExternalPolicy(
scoped_ptr<sandbox::SandboxBPFPolicy> policy) { scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy> policy) {
#if defined(USE_SECCOMP_BPF) #if defined(USE_SECCOMP_BPF)
if (IsSeccompBPFDesired() && SupportsSandbox()) { if (IsSeccompBPFDesired() && SupportsSandbox()) {
CHECK(policy); CHECK(policy);
...@@ -285,12 +283,12 @@ bool SandboxSeccompBPF::StartSandboxWithExternalPolicy( ...@@ -285,12 +283,12 @@ bool SandboxSeccompBPF::StartSandboxWithExternalPolicy(
return false; return false;
} }
scoped_ptr<sandbox::SandboxBPFPolicy> scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>
SandboxSeccompBPF::GetBaselinePolicy() { SandboxSeccompBPF::GetBaselinePolicy() {
#if defined(USE_SECCOMP_BPF) #if defined(USE_SECCOMP_BPF)
return scoped_ptr<sandbox::SandboxBPFPolicy>(new BaselinePolicy); return scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>(new BaselinePolicy);
#else #else
return scoped_ptr<sandbox::SandboxBPFPolicy>(); return scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>();
#endif // defined(USE_SECCOMP_BPF) #endif // defined(USE_SECCOMP_BPF)
} }
......
...@@ -11,7 +11,9 @@ ...@@ -11,7 +11,9 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
namespace sandbox { namespace sandbox {
class SandboxBPFPolicy; namespace bpf_dsl {
class SandboxBPFDSLPolicy;
}
} }
namespace content { namespace content {
...@@ -39,9 +41,9 @@ class SandboxSeccompBPF { ...@@ -39,9 +41,9 @@ class SandboxSeccompBPF {
// This is the API to enable a seccomp-bpf sandbox by using an // This is the API to enable a seccomp-bpf sandbox by using an
// external policy. // external policy.
static bool StartSandboxWithExternalPolicy( static bool StartSandboxWithExternalPolicy(
scoped_ptr<sandbox::SandboxBPFPolicy> policy); scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy> policy);
// The "baseline" policy can be a useful base to build a sandbox policy. // The "baseline" policy can be a useful base to build a sandbox policy.
static scoped_ptr<sandbox::SandboxBPFPolicy> GetBaselinePolicy(); static scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy> GetBaselinePolicy();
private: private:
DISALLOW_IMPLICIT_CONSTRUCTORS(SandboxSeccompBPF); DISALLOW_IMPLICIT_CONSTRUCTORS(SandboxSeccompBPF);
...@@ -50,4 +52,3 @@ class SandboxSeccompBPF { ...@@ -50,4 +52,3 @@ class SandboxSeccompBPF {
} // namespace content } // namespace content
#endif // CONTENT_COMMON_SANDBOX_LINUX_SANDBOX_SECCOMP_BPF_LINUX_H_ #endif // CONTENT_COMMON_SANDBOX_LINUX_SANDBOX_SECCOMP_BPF_LINUX_H_
...@@ -16,7 +16,9 @@ class FilePath; ...@@ -16,7 +16,9 @@ class FilePath;
} }
namespace sandbox { namespace sandbox {
class SandboxBPFPolicy; namespace bpf_dsl {
class SandboxBPFDSLPolicy;
}
struct SandboxInterfaceInfo; struct SandboxInterfaceInfo;
} }
...@@ -86,12 +88,12 @@ class SandboxInitializerDelegate; ...@@ -86,12 +88,12 @@ class SandboxInitializerDelegate;
// Initialize a seccomp-bpf sandbox. |policy| may not be NULL. // Initialize a seccomp-bpf sandbox. |policy| may not be NULL.
// Returns true if the sandbox has been properly engaged. // Returns true if the sandbox has been properly engaged.
CONTENT_EXPORT bool InitializeSandbox( CONTENT_EXPORT bool InitializeSandbox(
scoped_ptr<sandbox::SandboxBPFPolicy> policy); scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy> policy);
// Return a "baseline" policy. This is used by a SandboxInitializerDelegate to // Return a "baseline" policy. This is used by a SandboxInitializerDelegate to
// implement a policy that is derived from the baseline. // implement a policy that is derived from the baseline.
CONTENT_EXPORT scoped_ptr<sandbox::SandboxBPFPolicy> CONTENT_EXPORT scoped_ptr<sandbox::bpf_dsl::SandboxBPFDSLPolicy>
GetBPFSandboxBaselinePolicy(); GetBPFSandboxBaselinePolicy();
#endif // defined(OS_LINUX) #endif // defined(OS_LINUX)
} // namespace content } // namespace content
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment