diff options
author | dmaclach@chromium.org <dmaclach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-31 21:11:16 +0000 |
---|---|---|
committer | dmaclach@chromium.org <dmaclach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-31 21:11:16 +0000 |
commit | e5511265a24b1cdef66178b417e96259d62ce1b5 (patch) | |
tree | 33dc5093d3b902f269a7f21055134c45c19a62a2 | |
parent | ee55219bf9a3787ff77b69e3fa5fcbee7bf98376 (diff) | |
download | chromium_src-e5511265a24b1cdef66178b417e96259d62ce1b5.zip chromium_src-e5511265a24b1cdef66178b417e96259d62ce1b5.tar.gz chromium_src-e5511265a24b1cdef66178b417e96259d62ce1b5.tar.bz2 |
Revert 43253 - 1. Create a new sandbox type which allows access to Unix sockets in the Mac
renderer sandbox to support running Native Client.
2. Put the Native Client sel_ldr (which contains the user's untrusted code)
into a new Mac sandbox type.
3. Open /dev/random in SandboxWarmup().
4. Remove the "nosandbox" flag when running Mac tests.
See http://codereview.chromium.org/1234003/show which was reverted because of
problems on Mac 10.6. This change is identical except for the ";NACL" lines
in the *.sb files. I've removed the 10.6specific sandbox commands and used
the generic commands that work on 10.5 and 10.6. I will work on adding the
10.6specific commands in a different change list.
BUG=http://code.google.com/p/nativeclient/issues/detail?id=327
TEST=nacl_ui_tests still pass while running in the sandbox.
Review URL: http://codereview.chromium.org/1525005
TBR=msneck@google.com
Review URL: http://codereview.chromium.org/1572009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43259 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/rand_util_c.h | 3 | ||||
-rw-r--r-- | chrome/browser/nacl-loader.sb | 35 | ||||
-rwxr-xr-x | chrome/chrome_browser.gypi | 1 | ||||
-rw-r--r-- | chrome/common/sandbox_init_wrapper_mac.cc | 19 | ||||
-rw-r--r-- | chrome/common/sandbox_mac.h | 10 | ||||
-rw-r--r-- | chrome/common/sandbox_mac.mm | 38 | ||||
-rw-r--r-- | chrome/renderer/renderer.sb | 12 | ||||
-rw-r--r-- | chrome/test/nacl/nacl_test.cc | 4 |
8 files changed, 9 insertions, 113 deletions
diff --git a/base/rand_util_c.h b/base/rand_util_c.h index 20e3082..5a0bf73 100644 --- a/base/rand_util_c.h +++ b/base/rand_util_c.h @@ -9,9 +9,6 @@ extern "C" { #endif -// Note this *should* be in "namespace base" but the function is needed -// from C so namespaces cannot be used. - // Returns an FD for /dev/urandom, possibly pre-opened before sandboxing // was switched on. This is a C function so that Native Client can use it. int GetUrandomFD(void); diff --git a/chrome/browser/nacl-loader.sb b/chrome/browser/nacl-loader.sb deleted file mode 100644 index 0cf9896..0000000 --- a/chrome/browser/nacl-loader.sb +++ /dev/null @@ -1,35 +0,0 @@ -;; -;; Copyright (c) 2009 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. -;; -; This is the Sandbox configuration file used for safeguarding the user's -; untrusted code within Native Client. -; -(version 1) -(deny default) -; Support for programmatically enabling verbose debugging. -;ENABLE_LOGGING (debug deny) - -; Allow sending signals to self - http://crbug.com/20370 -(allow signal (target self)) - -; Needed for full-page-zoomed controls - http://crbug.com/11325 -(allow sysctl-read) - -; Each line is marked with the System version that needs it. -; This profile is tested with the following system versions: -; 10.5.6, 10.6 - -; Allow following symlinks -(allow file-read-metadata) ; 10.5.6 - -; Needed for IPC on 10.6 -;10.6_ONLY (allow ipc-posix-shm) - -; Needed for the Native Client plugin and loader. -; TODO(msneck): Refactor Native Client to use something other than Unix -; sockets. -; See http://code.google.com/p/nativeclient/issues/detail?id=344 -(allow network-inbound (from unix-socket)) -(allow network-outbound (to unix-socket)) diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index de4379b..aa10284 100755 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2574,7 +2574,6 @@ '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework', ], 'mac_bundle_resources': [ - 'browser/nacl-loader.sb', 'browser/utility.sb', 'browser/worker.sb', ], diff --git a/chrome/common/sandbox_init_wrapper_mac.cc b/chrome/common/sandbox_init_wrapper_mac.cc index 3ed61ed..898faed 100644 --- a/chrome/common/sandbox_init_wrapper_mac.cc +++ b/chrome/common/sandbox_init_wrapper_mac.cc @@ -20,17 +20,8 @@ bool SandboxInitWrapper::InitializeSandbox(const CommandLine& command_line, // Browser process isn't sandboxed. return true; } else if (process_type == switches::kRendererProcess) { - // Renderer process sandbox. If --internal_nacl is present then use the - // version of the renderer sandbox which allows Native Client to use Unix - // sockets. - // TODO(msneck): Remove the use of Unix sockets from Native Client and - // then get rid of the SANDBOX_TYPE_NACL_PLUGIN enum. - // See http://code.google.com/p/nativeclient/issues/detail?id=344 - if (command_line.HasSwitch(switches::kInternalNaCl)) { - sandbox_process_type = sandbox::SANDBOX_TYPE_NACL_PLUGIN; - } else { - sandbox_process_type = sandbox::SANDBOX_TYPE_RENDERER; - } + // Renderer process sandbox. + sandbox_process_type = sandbox::SANDBOX_TYPE_RENDERER; } else if (process_type == switches::kExtensionProcess) { // Extension processes are just renderers [they use RenderMain()] with a // different set of command line flags. @@ -48,10 +39,8 @@ bool SandboxInitWrapper::InitializeSandbox(const CommandLine& command_line, } else if (process_type == switches::kWorkerProcess) { // Worker process sandbox. sandbox_process_type = sandbox::SANDBOX_TYPE_WORKER; - } else if (process_type == switches::kNaClLoaderProcess) { - // Native Client sel_ldr (user untrusted code) sandbox. - sandbox_process_type = sandbox::SANDBOX_TYPE_NACL_LOADER; - } else if ((process_type == switches::kPluginProcess) || + } else if ((process_type == switches::kNaClLoaderProcess) || + (process_type == switches::kPluginProcess) || (process_type == switches::kProfileImportProcess) || (process_type == switches::kGpuProcess)) { return true; diff --git a/chrome/common/sandbox_mac.h b/chrome/common/sandbox_mac.h index c8ef4c3..a8a55b0 100644 --- a/chrome/common/sandbox_mac.h +++ b/chrome/common/sandbox_mac.h @@ -12,20 +12,12 @@ namespace sandbox { enum SandboxProcessType { SANDBOX_TYPE_RENDERER, - // The worker processes uses the most restrictive sandbox which has almost - // *everything* locked down. Only a couple of /System/Library/ paths and - // some other very basic operations (e.g., reading metadata to allow - // following symlinks) are permitted. + // Worker process has *everything* not needed for Cocoa locked down. SANDBOX_TYPE_WORKER, // Utility process is as restrictive as the worker process except full access // is allowed to one configurable directory. SANDBOX_TYPE_UTILITY, - - // Native Client sandboxes. The plugin contains trusted code and the - // loader contains the user's untrusted code. - SANDBOX_TYPE_NACL_PLUGIN, - SANDBOX_TYPE_NACL_LOADER, }; // Warm up System APIs that empirically need to be accessed before the Sandbox diff --git a/chrome/common/sandbox_mac.mm b/chrome/common/sandbox_mac.mm index 1299481..ca8ac6c 100644 --- a/chrome/common/sandbox_mac.mm +++ b/chrome/common/sandbox_mac.mm @@ -15,7 +15,6 @@ extern "C" { #include "base/command_line.h" #include "base/file_util.h" #include "base/mac_util.h" -#include "base/rand_util_c.h" #include "base/scoped_cftyperef.h" #include "base/scoped_nsautorelease_pool.h" #include "base/string16.h" @@ -235,10 +234,6 @@ void SandboxWarmup() { NULL)); CGImageSourceGetStatus(img); } - - { // Native Client access to /dev/random. - GetUrandomFD(); - } } // Turns on the OS X sandbox for this process. @@ -255,7 +250,6 @@ bool EnableSandbox(SandboxProcessType sandbox_type, // TODO(jeremy): Look at using include syntax to unify common parts of sandbox // definition files. NSString* sandbox_config_filename = nil; - bool allow_nacl_lines = false; switch (sandbox_type) { case SANDBOX_TYPE_RENDERER: sandbox_config_filename = @"renderer"; @@ -266,26 +260,6 @@ bool EnableSandbox(SandboxProcessType sandbox_type, case SANDBOX_TYPE_UTILITY: sandbox_config_filename = @"utility"; break; - case SANDBOX_TYPE_NACL_PLUGIN: - // The Native Client plugin is a standard renderer sandbox with some - // additional lines to support use of Unix sockets. - // TODO(msneck): Remove the use of Unix sockets from Native Client and - // then remove the associated rules from chrome/renderer/renderer.sb. - // See http://code.google.com/p/nativeclient/issues/detail?id=344 - sandbox_config_filename = @"renderer"; - allow_nacl_lines = true; - break; - case SANDBOX_TYPE_NACL_LOADER: - // The Native Client loader is used for safeguarding the user's - // untrusted code within Native Client. - // TODO(msneck): Remove the use of Unix sockets from Native Client and - // then decide on an appropriate sandbox type for the untrusted code. - // This might simply mean removing the Unix socket rules from - // chrome/browser/nacl-loader.sb or it might mean sharing the - // sandbox configuration with SANDBOX_TYPE_WORKER. - // See http://code.google.com/p/nativeclient/issues/detail?id=344 - sandbox_config_filename = @"nacl-loader"; - break; default: NOTREACHED(); return false; @@ -314,13 +288,6 @@ bool EnableSandbox(SandboxProcessType sandbox_type, withString:@""]; } - // Enable Native Client lines if they are allowed. - if (allow_nacl_lines) { - sandbox_data = [sandbox_data - stringByReplacingOccurrencesOfString:@";NACL" - withString:@""]; - } - if (!allowed_dir.empty()) { // The sandbox only understands "real" paths. This resolving step is // needed so the caller doesn't need to worry about things like /var @@ -374,11 +341,6 @@ bool EnableSandbox(SandboxProcessType sandbox_type, sandbox_data = [sandbox_data stringByReplacingOccurrencesOfString:@"USER_HOMEDIR" withString:home_dir_escaped_ns]; - } else if (major_version == 10 && minor_version < 6) { - // Sandbox rules only for versions before 10.6. - sandbox_data = [sandbox_data - stringByReplacingOccurrencesOfString:@";BEFORE_10.6" - withString:@""]; } char* error_buff = NULL; diff --git a/chrome/renderer/renderer.sb b/chrome/renderer/renderer.sb index da63cfd..27b2a90c 100644 --- a/chrome/renderer/renderer.sb +++ b/chrome/renderer/renderer.sb @@ -32,18 +32,8 @@ (allow mach-lookup (global-name "com.apple.FontObjectsServer")) ; 10.5.6 ;10.6_ONLY (allow mach-lookup (global-name "com.apple.FontServer")) ; 10.6 -; USER_HOMEDIR is substitued at runtime - http://crbug.com/11269 +; USER_HOMEDIR is substitued at runtime - http://crbug.com/11269 ;10.6_ONLY (allow file-read-data (subpath "USER_HOMEDIR/Library/Fonts")) ; 10.6 ; Needed for IPC on 10.6 ;10.6_ONLY (allow ipc-posix-shm) - -; Needed for the Native Client plugin and loader. These lines are enabled -; if and only if --internal-nacl (or --enable-nacl) are used (and they -; are off by default.) -; TODO(msneck): Refactor Native Client to use something other than Unix -; sockets. Then change or remove the code in chrome/common/sandbox_mac.mm -; which deals with the ";NACL" prefix. -; See http://code.google.com/p/nativeclient/issues/detail?id=344 -;NACL (allow network-inbound (from unix-socket)) -;NACL (allow network-outbound (to unix-socket)) diff --git a/chrome/test/nacl/nacl_test.cc b/chrome/test/nacl/nacl_test.cc index 1ae70f9..7d2b6de 100644 --- a/chrome/test/nacl/nacl_test.cc +++ b/chrome/test/nacl/nacl_test.cc @@ -62,7 +62,9 @@ NaClTest::NaClTest() // Currently we disable some of the sandboxes. See: // Make NaCl work in Chromium's Linux seccomp sandbox and the Mac sandbox // http://code.google.com/p/nativeclient/issues/detail?id=344 -#if defined(OS_LINUX) && defined(USE_SECCOMP_SANDBOX) +#if defined(OS_MACOSX) + launch_arguments_.AppendSwitch(switches::kNoSandbox); +#elif defined(OS_LINUX) && defined(USE_SECCOMP_SANDBOX) launch_arguments_.AppendSwitch(switches::kDisableSeccompSandbox); #endif } |