Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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. | |
|
Charlie Reis
2017/06/02 20:50:41
Can you repeat this comment in content_switches.cc
Greg K
2017/06/02 23:59:02
Done.
| |
| 39 // TODO(kerrnel): Remove this once the V2 sandbox migration is complete. | |
| 40 constexpr char v2_sandbox_enabled_arg[] = "--v2-sandbox-enabled"; | |
| 35 // The command line parameter for the file descriptor used to receive the | 41 // The command line parameter for the file descriptor used to receive the |
| 36 // sandbox policy. | 42 // sandbox policy. |
| 37 constexpr char fd_mapping_arg[] = "--fd_mapping="; | 43 constexpr char fd_mapping_arg[] = "--fd_mapping="; |
| 38 | 44 |
| 39 __attribute__((noreturn)) void SandboxExec(const char* exec_path, | 45 __attribute__((noreturn)) void SandboxExec(const char* exec_path, |
| 40 int argc, | 46 int argc, |
| 41 char* argv[], | 47 char* argv[], |
| 42 int fd_mapping) { | 48 int fd_mapping) { |
| 43 char rp[MAXPATHLEN]; | 49 char rp[MAXPATHLEN]; |
| 44 if (realpath(exec_path, rp) == NULL) { | 50 if (realpath(exec_path, rp) == NULL) { |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 64 abort(); | 70 abort(); |
| 65 } | 71 } |
| 66 | 72 |
| 67 std::vector<char*> new_argv; | 73 std::vector<char*> new_argv; |
| 68 for (int i = 1; i < argc; ++i) { | 74 for (int i = 1; i < argc; ++i) { |
| 69 if (strcmp(argv[i], v2_sandbox_arg) != 0 && | 75 if (strcmp(argv[i], v2_sandbox_arg) != 0 && |
| 70 strncmp(argv[i], fd_mapping_arg, strlen(fd_mapping_arg)) != 0) { | 76 strncmp(argv[i], fd_mapping_arg, strlen(fd_mapping_arg)) != 0) { |
| 71 new_argv.push_back(argv[i]); | 77 new_argv.push_back(argv[i]); |
| 72 } | 78 } |
| 73 } | 79 } |
| 80 // Tell Chrome that the sandbox should already be enabled. | |
| 81 // Note that execv() is documented to treat the argv as constants, so the | |
| 82 // const_cast is safe. | |
| 83 new_argv.push_back(const_cast<char*>(v2_sandbox_enabled_arg)); | |
| 74 new_argv.push_back(nullptr); | 84 new_argv.push_back(nullptr); |
| 75 | 85 |
| 76 // The helper executable re-executes itself under the sandbox. | 86 // The helper executable re-executes itself under the sandbox. |
| 77 execv(exec_path, new_argv.data()); | 87 execv(exec_path, new_argv.data()); |
| 78 perror("execve"); | 88 perror("execve"); |
| 79 abort(); | 89 abort(); |
| 80 } | 90 } |
| 81 #endif // defined(HELPER_EXECUTABLE) | 91 #endif // defined(HELPER_EXECUTABLE) |
| 82 | 92 |
| 83 } // namespace | 93 } // namespace |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 if (!chrome_main) { | 166 if (!chrome_main) { |
| 157 fprintf(stderr, "dlsym ChromeMain: %s\n", dlerror()); | 167 fprintf(stderr, "dlsym ChromeMain: %s\n", dlerror()); |
| 158 abort(); | 168 abort(); |
| 159 } | 169 } |
| 160 rv = chrome_main(argc, argv); | 170 rv = chrome_main(argc, argv); |
| 161 | 171 |
| 162 // exit, don't return from main, to avoid the apparent removal of main from | 172 // exit, don't return from main, to avoid the apparent removal of main from |
| 163 // stack backtraces under tail call optimization. | 173 // stack backtraces under tail call optimization. |
| 164 exit(rv); | 174 exit(rv); |
| 165 } | 175 } |
| OLD | NEW |