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

Side by Side Diff: chrome/app/chrome_exe_main_mac.cc

Issue 2921733002: Add flags for v2 sandbox to Chrome and Helper executable. (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | content/common/sandbox_init_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // The entry point for all Mac Chromium processes, including the outer app 5 // The entry point for all Mac Chromium processes, including the outer app
6 // bundle (browser) and helper app (renderer, plugin, and friends). 6 // bundle (browser) and helper app (renderer, plugin, and friends).
7 7
8 #include <dlfcn.h> 8 #include <dlfcn.h>
9 #include <errno.h> 9 #include <errno.h>
10 #include <libgen.h> 10 #include <libgen.h>
(...skipping 14 matching lines...) Expand all
25 #include "sandbox/mac/seatbelt_exec.h" 25 #include "sandbox/mac/seatbelt_exec.h"
26 #endif // defined(HELPER_EXECUTABLE) 26 #endif // defined(HELPER_EXECUTABLE)
27 27
28 namespace { 28 namespace {
29 29
30 typedef int (*ChromeMainPtr)(int, char**); 30 typedef int (*ChromeMainPtr)(int, char**);
31 31
32 #if defined(HELPER_EXECUTABLE) 32 #if defined(HELPER_EXECUTABLE)
33 // The command line parameter to engage the v2 sandbox. 33 // The command line parameter to engage the v2 sandbox.
34 constexpr char v2_sandbox_arg[] = "--v2-sandbox"; 34 constexpr char v2_sandbox_arg[] = "--v2-sandbox";
35 // The command line paramter indicating that the v2 sandbox is enabled. This
36 // must be different than the "v2-sandbox" flag to avoid endless re-executing.
37 // The flag tells the sandbox initialization code inside Chrome that the sandbox
38 // should already be enabled.
39 char v2_sandbox_enabled_arg[] = "--v2-sandbox-enabled";
Robert Sesek 2017/06/01 22:07:49 constexpr?
Robert Sesek 2017/06/01 22:07:49 Since "enabled" is so overloaded for features, I t
Greg K 2017/06/01 22:10:40 The reason I make it a positive for now is because
Robert Sesek 2017/06/01 22:12:28 That's true, unless you propagated the --v2-sandbo
Greg K 2017/06/01 22:13:22 Yes. I don't want to re-add the new flag because i
Greg K 2017/06/01 22:23:56 I don't actually know a better way to do this. The
Greg K 2017/06/01 22:26:11 For what it's worth, these are document as constan
35 // The command line parameter for the file descriptor used to receive the 40 // The command line parameter for the file descriptor used to receive the
36 // sandbox policy. 41 // sandbox policy.
37 constexpr char fd_mapping_arg[] = "--fd_mapping="; 42 constexpr char fd_mapping_arg[] = "--fd_mapping=";
38 43
39 __attribute__((noreturn)) void SandboxExec(const char* exec_path, 44 __attribute__((noreturn)) void SandboxExec(const char* exec_path,
40 int argc, 45 int argc,
41 char* argv[], 46 char* argv[],
42 int fd_mapping) { 47 int fd_mapping) {
43 char rp[MAXPATHLEN]; 48 char rp[MAXPATHLEN];
44 if (realpath(exec_path, rp) == NULL) { 49 if (realpath(exec_path, rp) == NULL) {
(...skipping 19 matching lines...) Expand all
64 abort(); 69 abort();
65 } 70 }
66 71
67 std::vector<char*> new_argv; 72 std::vector<char*> new_argv;
68 for (int i = 1; i < argc; ++i) { 73 for (int i = 1; i < argc; ++i) {
69 if (strcmp(argv[i], v2_sandbox_arg) != 0 && 74 if (strcmp(argv[i], v2_sandbox_arg) != 0 &&
70 strncmp(argv[i], fd_mapping_arg, strlen(fd_mapping_arg)) != 0) { 75 strncmp(argv[i], fd_mapping_arg, strlen(fd_mapping_arg)) != 0) {
71 new_argv.push_back(argv[i]); 76 new_argv.push_back(argv[i]);
72 } 77 }
73 } 78 }
79 // Tell Chrome that the sandbox should already be enabled.
80 new_argv.push_back(v2_sandbox_enabled_arg);
74 new_argv.push_back(nullptr); 81 new_argv.push_back(nullptr);
75 82
76 // The helper executable re-executes itself under the sandbox. 83 // The helper executable re-executes itself under the sandbox.
77 execv(exec_path, new_argv.data()); 84 execv(exec_path, new_argv.data());
78 perror("execve"); 85 perror("execve");
79 abort(); 86 abort();
80 } 87 }
81 #endif // defined(HELPER_EXECUTABLE) 88 #endif // defined(HELPER_EXECUTABLE)
82 89
83 } // namespace 90 } // namespace
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 if (!chrome_main) { 163 if (!chrome_main) {
157 fprintf(stderr, "dlsym ChromeMain: %s\n", dlerror()); 164 fprintf(stderr, "dlsym ChromeMain: %s\n", dlerror());
158 abort(); 165 abort();
159 } 166 }
160 rv = chrome_main(argc, argv); 167 rv = chrome_main(argc, argv);
161 168
162 // exit, don't return from main, to avoid the apparent removal of main from 169 // exit, don't return from main, to avoid the apparent removal of main from
163 // stack backtraces under tail call optimization. 170 // stack backtraces under tail call optimization.
164 exit(rv); 171 exit(rv);
165 } 172 }
OLDNEW
« no previous file with comments | « no previous file | content/common/sandbox_init_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698