Index: content/common/sandbox_linux/bpf_gpu_policy_linux.cc |
diff --git a/content/common/sandbox_linux/bpf_gpu_policy_linux.cc b/content/common/sandbox_linux/bpf_gpu_policy_linux.cc |
index b119c4251fc0fd5e36fd149654ae3343763b050f..8ea2600a7ed9a20695b921f4a652bb947f50917b 100644 |
--- a/content/common/sandbox_linux/bpf_gpu_policy_linux.cc |
+++ b/content/common/sandbox_linux/bpf_gpu_policy_linux.cc |
@@ -106,13 +106,16 @@ intptr_t GpuSIGSYS_Handler(const struct arch_seccomp_data& args, |
class GpuBrokerProcessPolicy : public GpuProcessPolicy { |
public: |
- GpuBrokerProcessPolicy() {} |
+ static sandbox::SandboxBPFPolicy* Create() { |
+ return new GpuBrokerProcessPolicy(); |
+ } |
virtual ~GpuBrokerProcessPolicy() {} |
virtual ErrorCode EvaluateSyscall(SandboxBPF* sandbox_compiler, |
int system_call_number) const OVERRIDE; |
private: |
+ GpuBrokerProcessPolicy() {} |
DISALLOW_COPY_AND_ASSIGN(GpuBrokerProcessPolicy); |
}; |
@@ -146,9 +149,11 @@ void UpdateProcessTypeToGpuBroker() { |
} |
bool UpdateProcessTypeAndEnableSandbox( |
- const base::Callback<bool(void)>& broker_sandboxer_callback) { |
+ sandbox::SandboxBPFPolicy* (*broker_sandboxer_allocator)(void)) { |
+ DCHECK(broker_sandboxer_allocator); |
UpdateProcessTypeToGpuBroker(); |
- return broker_sandboxer_callback.Run(); |
+ return SandboxSeccompBPF::StartSandboxWithExternalPolicy( |
+ make_scoped_ptr(broker_sandboxer_allocator())); |
} |
} // namespace |
@@ -198,9 +203,7 @@ bool GpuProcessPolicy::PreSandboxHook() { |
DCHECK(!broker_process()); |
// Create a new broker process. |
InitGpuBrokerProcess( |
- base::Bind(&SandboxSeccompBPF::StartSandboxWithExternalPolicy, |
- base::Passed(scoped_ptr<sandbox::SandboxBPFPolicy>( |
- new GpuBrokerProcessPolicy))), |
+ GpuBrokerProcessPolicy::Create, |
std::vector<std::string>(), // No extra files in whitelist. |
std::vector<std::string>()); |
@@ -226,7 +229,7 @@ bool GpuProcessPolicy::PreSandboxHook() { |
} |
void GpuProcessPolicy::InitGpuBrokerProcess( |
- const base::Callback<bool(void)>& broker_sandboxer_callback, |
+ sandbox::SandboxBPFPolicy* (*broker_sandboxer_allocator)(void), |
const std::vector<std::string>& read_whitelist_extra, |
const std::vector<std::string>& write_whitelist_extra) { |
static const char kDriRcPath[] = "/etc/drirc"; |
@@ -256,7 +259,7 @@ void GpuProcessPolicy::InitGpuBrokerProcess( |
// The initialization callback will perform generic initialization and then |
// call broker_sandboxer_callback. |
CHECK(broker_process_->Init(base::Bind(&UpdateProcessTypeAndEnableSandbox, |
- broker_sandboxer_callback))); |
+ broker_sandboxer_allocator))); |
} |
} // namespace content |