summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-15 22:48:37 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-15 22:48:37 +0000
commit57313614561d4d7c53d7f41e33b275b6f5199fcf (patch)
tree652f8a0e1292e01e8f5a483a10a8429b975db6d7
parent505e780e7cabf2e30f9e786480f3b83b5936098c (diff)
downloadchromium_src-57313614561d4d7c53d7f41e33b275b6f5199fcf.zip
chromium_src-57313614561d4d7c53d7f41e33b275b6f5199fcf.tar.gz
chromium_src-57313614561d4d7c53d7f41e33b275b6f5199fcf.tar.bz2
Linux: move hardcoded paths to GYP variables.
This patch removes the hardcoded paths for the sandbox binary location and the chrome binary location for the sandbox. Instead, you can now set GYP variables for these things. Indeed, you have to set a GYP variable in order to use the sandbox now. GYP variables can be set on the command line, if you run gyp.py directly, with -D key=value. Or you can export GYP_DEFINES="key=value key2=value2". Now, in order to use the sandbox you should set: linux_sandbox_path=/opt/google/chrome/chrome-sandbox linux_sandbox_chrome_path=/opt/google/chrome/chrome (changing the paths as needed, of course). See the comments in build/common.gypi For development see http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment Because developers need to setup a special sandbox binary. http://codereview.chromium.org/149689 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20801 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--build/common.gypi13
-rw-r--r--chrome/browser/zygote_host_linux.cc17
-rw-r--r--chrome/chrome.gyp5
-rw-r--r--sandbox/linux/suid/sandbox.cc11
-rw-r--r--sandbox/sandbox.gyp3
5 files changed, 38 insertions, 11 deletions
diff --git a/build/common.gypi b/build/common.gypi
index 4cd33e1..c19713b 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -90,7 +90,18 @@
#
# Developers should read
# http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment
- 'linux_suid_sandbox_restrictions': 'Path',
+ 'linux_suid_sandbox_restrictions%': 'Path',
+
+ # This is the location of the sandbox binary. Chrome looks for this before
+ # running the zygote process. If found, and SUID, it will be used to
+ # sandbox the zygote process and, thus, all renderer processes.
+ 'linux_sandbox_path%': '',
+
+ # If |linux_suid_sandbox_restrictions|, above, is 'Path' then only a single
+ # path is allowed to be exec'ed by the sandbox for security reasons. That
+ # path is set here. It should be the final location of the Chromium binary
+ # on the system.
+ 'linux_sandbox_chrome_path%': '/opt/google/chrome/chrome',
},
'target_defaults': {
'conditions': [
diff --git a/chrome/browser/zygote_host_linux.cc b/chrome/browser/zygote_host_linux.cc
index fc8b981..dad473b 100644
--- a/chrome/browser/zygote_host_linux.cc
+++ b/chrome/browser/zygote_host_linux.cc
@@ -22,13 +22,6 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
-// Previously we just looked for the binary next to the Chromium binary. But
-// this breaks people who do a build-all.
-// NOTE packagers: change this.
-
-// static const char kSandboxBinary[] = "/opt/google/chrome/chrome-sandbox";
-static const char kSandboxBinary[] = "/false";
-
ZygoteHost::ZygoteHost() {
std::wstring chrome_path;
CHECK(PathService::Get(base::FILE_EXE, &chrome_path));
@@ -51,15 +44,21 @@ ZygoteHost::ZygoteHost() {
const char* sandbox_binary = NULL;
struct stat st;
+
+ // In Chromium branded builds, developers can set an environment variable to
+ // use the development sandbox. See
+ // http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment
if (stat("/proc/self/exe", &st) == 0 &&
st.st_uid == getuid()) {
sandbox_binary = getenv("CHROME_DEVEL_SANDBOX");
}
+#if defined(LINUX_SANDBOX_PATH)
if (!sandbox_binary)
- sandbox_binary = kSandboxBinary;
+ sandbox_binary = LINUX_SANDBOX_PATH;
+#endif
- if (stat(sandbox_binary, &st) == 0) {
+ if (sandbox_binary && stat(sandbox_binary, &st) == 0) {
if (access(sandbox_binary, X_OK) == 0 &&
(st.st_mode & S_ISUID) &&
(st.st_mode & S_IXOTH)) {
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 3cee1388..cb3b0a2 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -1858,6 +1858,11 @@
'app/breakpad_linux.h',
],
}],
+ ['linux_sandbox_path != ""', {
+ 'defines': [
+ 'LINUX_SANDBOX_PATH="<(linux_sandbox_path)"',
+ ],
+ }],
],
}],
['OS=="linux" and toolkit_views==0', {
diff --git a/sandbox/linux/suid/sandbox.cc b/sandbox/linux/suid/sandbox.cc
index ea53406..a2332d8 100644
--- a/sandbox/linux/suid/sandbox.cc
+++ b/sandbox/linux/suid/sandbox.cc
@@ -25,7 +25,16 @@
#define CLONE_NEWPID 0x20000000
#endif
-static const char kChromeBinary[] = "/opt/google/chrome/chrome";
+#if !defined(LINUX_SANDBOX_CHROME_PATH) && \
+ !defined(CHROME_DEVEL_SANDBOX)
+#error LINUX_SANDBOX_CHROME_PATH must be defined to be the location of the \
+ Chrome binary, or CHROME_DEVEL_SANDBOX must be defined
+#endif
+
+#if defined(LINUX_SANDBOX_CHROME_PATH)
+static const char kChromeBinary[] = LINUX_SANDBOX_CHROME_PATH;
+#endif
+
static const char kSandboxDescriptorEnvironmentVarName[] = "SBX_D";
// These are the magic byte values which the sandboxed process uses to request
diff --git a/sandbox/sandbox.gyp b/sandbox/sandbox.gyp
index 76e5dd3..6ca2cef 100644
--- a/sandbox/sandbox.gyp
+++ b/sandbox/sandbox.gyp
@@ -19,6 +19,9 @@
},
],
],
+ 'defines': [
+ 'LINUX_SANDBOX_CHROME_PATH="<(linux_sandbox_chrome_path)"',
+ ],
'sources': [
'linux/suid/sandbox.cc',
],