summaryrefslogtreecommitdiffstats
path: root/base/process_util_posix.cc
diff options
context:
space:
mode:
authorbradchen@google.com <bradchen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-15 23:55:21 +0000
committerbradchen@google.com <bradchen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-15 23:55:21 +0000
commitca7c456246121d7e17c22181f0a76eb5c79d3ac0 (patch)
tree0d79285f4e3c0b1e0239225917c976720e9a0096 /base/process_util_posix.cc
parent3c52ba7a44c24fed4cc3991e9ceae0f366323521 (diff)
downloadchromium_src-ca7c456246121d7e17c22181f0a76eb5c79d3ac0.zip
chromium_src-ca7c456246121d7e17c22181f0a76eb5c79d3ac0.tar.gz
chromium_src-ca7c456246121d7e17c22181f0a76eb5c79d3ac0.tar.bz2
Add a "clone" option to base/process_util.h:LaunchProcess(). Useful inside Linux sandbox.
BUG=nativeclient:480 TEST=base/process_util_unittest.cc Review URL: http://codereview.chromium.org/7401002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92771 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process_util_posix.cc')
-rw-r--r--base/process_util_posix.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc
index 0fc8c0e..3bc4d97 100644
--- a/base/process_util_posix.cc
+++ b/base/process_util_posix.cc
@@ -541,7 +541,16 @@ bool LaunchProcess(const std::vector<std::string>& argv,
if (options.environ)
new_environ.reset(AlterEnvironment(*options.environ, GetEnvironment()));
- pid = fork();
+ if (options.clone_flags) {
+#if defined(OS_LINUX)
+ pid = syscall(__NR_clone, options.clone_flags, 0, 0, 0);
+#else
+ pid = -1; // hygiene; prevent clang warnings
+ NOTREACHED() << "Tried to use clone() on non-Linux system";
+#endif
+ } else {
+ pid = fork();
+ }
if (pid < 0) {
PLOG(ERROR) << "fork";
return false;