Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(612)

Unified Diff: components/nacl/zygote/nacl_fork_delegate_linux.cc

Issue 308073002: Clear environment variables for nacl_helper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/nacl/zygote/nacl_fork_delegate_linux.cc
diff --git a/components/nacl/zygote/nacl_fork_delegate_linux.cc b/components/nacl/zygote/nacl_fork_delegate_linux.cc
index 1a42269a198cbc737035064a2a0d79b29573a7b9..65ba0c4be893dd682373a86a8877159530cdafc8 100644
--- a/components/nacl/zygote/nacl_fork_delegate_linux.cc
+++ b/components/nacl/zygote/nacl_fork_delegate_linux.cc
@@ -26,6 +26,7 @@
#include "base/posix/unix_domain_socket_linux.h"
#include "base/process/kill.h"
#include "base/process/launch.h"
+#include "base/strings/string_split.h"
#include "base/third_party/dynamic_annotations/dynamic_annotations.h"
#include "build/build_config.h"
#include "components/nacl/common/nacl_nonsfi_util.h"
@@ -44,6 +45,19 @@ const char kNaClHelperReservedAtZero[] =
"--reserved_at_zero=0xXXXXXXXXXXXXXXXX";
const char kNaClHelperRDebug[] = "--r_debug=0xXXXXXXXXXXXXXXXX";
+// This is an environment variable which controls which (if any) other
+// environment variables are passed through to NaCl processes. e.g.,
+// NACL_ENV_PASSTHROUGH="PATH PWD" would pass both $PATH and $PWD to the child
Mark Seaborn 2014/06/04 15:16:50 This should be "PATH,CWD".
elijahtaylor1 2014/06/04 16:36:37 Done.
+// process.
+const char kNaClEnvPassthrough[] = "NACL_ENV_PASSTHROUGH";
+char kNaClEnvPassthroughDelimiter = ',';
+
+// The following environment variables are always passed through if they exist
+// in the parent process.
+const char kNaClExeStderr[] = "NACL_EXE_STDERR";
+const char kNaClExeStdout[] = "NACL_EXE_STDOUT";
+const char kNaClVerbosity[] = "NACLVERBOSITY";
+
#if defined(ARCH_CPU_X86)
bool NonZeroSegmentBaseIsSlow() {
base::CPU cpuid;
@@ -243,6 +257,11 @@ void NaClForkDelegate::Init(const int sandboxdesc,
max_these_limits.push_back(RLIMIT_AS);
options.maximize_rlimits = &max_these_limits;
+ // To avoid information leaks in Non-SFI mode, clear the environment for
+ // the NaCl Helper process.
+ options.clear_environ = true;
+ AddPassthroughEnvToOptions(&options);
+
if (!base::LaunchProcess(argv_to_launch, options, NULL))
status_ = kNaClHelperLaunchFailed;
// parent and error cases are handled below
@@ -398,4 +417,24 @@ bool NaClForkDelegate::GetTerminationStatus(pid_t pid, bool known_dead,
return true;
}
+// static
+void NaClForkDelegate::AddPassthroughEnvToOptions(
+ base::LaunchOptions* options) {
+ scoped_ptr<base::Environment> env(base::Environment::Create());
+ std::string pass_through_string;
+ std::vector<std::string> pass_through_vars;
+ if (env->GetVar(kNaClEnvPassthrough, &pass_through_string)) {
+ base::SplitString(
+ pass_through_string, kNaClEnvPassthroughDelimiter, &pass_through_vars);
+ }
+ pass_through_vars.push_back(kNaClExeStderr);
+ pass_through_vars.push_back(kNaClExeStdout);
+ pass_through_vars.push_back(kNaClVerbosity);
+ for (size_t i = 0; i < pass_through_vars.size(); ++i) {
+ std::string temp;
+ if (env->GetVar(pass_through_vars[i].c_str(), &temp))
+ options->environ[pass_through_vars[i]] = temp;
+ }
+}
+
} // namespace nacl
« no previous file with comments | « components/nacl/zygote/nacl_fork_delegate_linux.h ('k') | components/nacl/zygote/nacl_fork_delegate_linux_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698