summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordmaclach@chromium.org <dmaclach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-31 21:11:16 +0000
committerdmaclach@chromium.org <dmaclach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-31 21:11:16 +0000
commite5511265a24b1cdef66178b417e96259d62ce1b5 (patch)
tree33dc5093d3b902f269a7f21055134c45c19a62a2
parentee55219bf9a3787ff77b69e3fa5fcbee7bf98376 (diff)
downloadchromium_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.h3
-rw-r--r--chrome/browser/nacl-loader.sb35
-rwxr-xr-xchrome/chrome_browser.gypi1
-rw-r--r--chrome/common/sandbox_init_wrapper_mac.cc19
-rw-r--r--chrome/common/sandbox_mac.h10
-rw-r--r--chrome/common/sandbox_mac.mm38
-rw-r--r--chrome/renderer/renderer.sb12
-rw-r--r--chrome/test/nacl/nacl_test.cc4
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
}