| Index: components/nacl/loader/sandbox_linux/nacl_sandbox_linux.cc
|
| diff --git a/components/nacl/loader/sandbox_linux/nacl_sandbox_linux.cc b/components/nacl/loader/sandbox_linux/nacl_sandbox_linux.cc
|
| index 869658f9f8b4eddec6efdd545b89c966626b0440..4ff1d4c076dcf71f5f7df6013fcc1c9452407843 100644
|
| --- a/components/nacl/loader/sandbox_linux/nacl_sandbox_linux.cc
|
| +++ b/components/nacl/loader/sandbox_linux/nacl_sandbox_linux.cc
|
| @@ -139,10 +139,14 @@ void NaClSandbox::InitializeLayerOneSandbox() {
|
| layer_one_enabled_ = true;
|
| } else if (sandbox::NamespaceSandbox::InNewUserNamespace()) {
|
| CHECK(sandbox::Credentials::MoveToNewUserNS());
|
| - // This relies on SealLayerOneSandbox() to be called later since this
|
| - // class is keeping a file descriptor to /proc/.
|
| CHECK(sandbox::Credentials::DropFileSystemAccess(proc_fd_.get()));
|
| - CHECK(sandbox::Credentials::DropAllCapabilities(proc_fd_.get()));
|
| +
|
| + // We do not drop CAP_SYS_ADMIN because we need it to place each child
|
| + // process in its own PID namespace later on.
|
| + std::vector<sandbox::Credentials::Capability> caps;
|
| + caps.push_back(sandbox::Credentials::Capability::SYS_ADMIN);
|
| + CHECK(sandbox::Credentials::SetCapabilities(proc_fd_.get(), caps));
|
| +
|
| CHECK(IsSandboxed());
|
| layer_one_enabled_ = true;
|
| }
|
|
|