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

Side by Side Diff: content/browser/child_process_launcher_helper_mac.cc

Issue 2931173003: Implement the V2 sandbox in the process launcher. (Closed)
Patch Set: Add comment explaining V2 sandbox Created 3 years, 5 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 #include "base/command_line.h"
6 #include "base/feature_list.h"
5 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
6 #include "base/path_service.h" 8 #include "base/path_service.h"
7 #include "base/posix/global_descriptors.h" 9 #include "base/posix/global_descriptors.h"
8 #include "content/browser/bootstrap_sandbox_manager_mac.h" 10 #include "content/browser/bootstrap_sandbox_manager_mac.h"
9 #include "content/browser/child_process_launcher.h" 11 #include "content/browser/child_process_launcher.h"
10 #include "content/browser/child_process_launcher_helper.h" 12 #include "content/browser/child_process_launcher_helper.h"
11 #include "content/browser/child_process_launcher_helper_posix.h" 13 #include "content/browser/child_process_launcher_helper_posix.h"
12 #include "content/browser/mach_broker_mac.h" 14 #include "content/browser/mach_broker_mac.h"
15 #include "content/browser/sandbox_parameters_mac.h"
16 #include "content/grit/content_resources.h"
17 #include "content/public/browser/content_browser_client.h"
18 #include "content/public/common/content_features.h"
19 #include "content/public/common/content_paths.h"
20 #include "content/public/common/content_switches.h"
13 #include "content/public/common/result_codes.h" 21 #include "content/public/common/result_codes.h"
14 #include "content/public/common/sandboxed_process_launcher_delegate.h" 22 #include "content/public/common/sandboxed_process_launcher_delegate.h"
15 #include "mojo/edk/embedder/scoped_platform_handle.h" 23 #include "mojo/edk/embedder/scoped_platform_handle.h"
16 #include "sandbox/mac/bootstrap_sandbox.h" 24 #include "sandbox/mac/bootstrap_sandbox.h"
17 #include "sandbox/mac/pre_exec_delegate.h" 25 #include "sandbox/mac/pre_exec_delegate.h"
26 #include "sandbox/mac/seatbelt_exec.h"
18 27
19 namespace content { 28 namespace content {
20 namespace internal { 29 namespace internal {
21 30
22 mojo::edk::ScopedPlatformHandle 31 mojo::edk::ScopedPlatformHandle
23 ChildProcessLauncherHelper::PrepareMojoPipeHandlesOnClientThread() { 32 ChildProcessLauncherHelper::PrepareMojoPipeHandlesOnClientThread() {
24 DCHECK_CURRENTLY_ON(client_thread_id_); 33 DCHECK_CURRENTLY_ON(client_thread_id_);
25 return mojo::edk::ScopedPlatformHandle(); 34 return mojo::edk::ScopedPlatformHandle();
26 } 35 }
27 36
(...skipping 12 matching lines...) Expand all
40 49
41 void ChildProcessLauncherHelper::BeforeLaunchOnLauncherThread( 50 void ChildProcessLauncherHelper::BeforeLaunchOnLauncherThread(
42 const FileMappedForLaunch& files_to_register, 51 const FileMappedForLaunch& files_to_register,
43 base::LaunchOptions* options) { 52 base::LaunchOptions* options) {
44 // Convert FD mapping to FileHandleMappingVector. 53 // Convert FD mapping to FileHandleMappingVector.
45 std::unique_ptr<base::FileHandleMappingVector> fds_to_map = 54 std::unique_ptr<base::FileHandleMappingVector> fds_to_map =
46 files_to_register.GetMappingWithIDAdjustment( 55 files_to_register.GetMappingWithIDAdjustment(
47 base::GlobalDescriptors::kBaseDescriptor); 56 base::GlobalDescriptors::kBaseDescriptor);
48 57
49 options->environ = delegate_->GetEnvironment(); 58 options->environ = delegate_->GetEnvironment();
59
60 if (base::FeatureList::IsEnabled(features::kMacV2Sandbox) &&
61 GetProcessType() == switches::kRendererProcess) {
62 seatbelt_exec_client_ = base::MakeUnique<sandbox::SeatbeltExecClient>();
63 base::StringPiece renderer_sb = GetContentClient()->GetDataResource(
64 IDR_RENDERER_SANDBOX_V2_PROFILE, ui::SCALE_FACTOR_NONE);
65 std::string profile = renderer_sb.as_string();
66
67 seatbelt_exec_client_->SetProfile(profile);
68
69 SetupRendererSandboxParameters(seatbelt_exec_client_.get());
70
71 int pipe = seatbelt_exec_client_->SendProfileAndGetFD();
72
73 base::FilePath helper_executable;
74 CHECK(PathService::Get(content::CHILD_PROCESS_EXE, &helper_executable));
75
76 fds_to_map->push_back(std::make_pair(pipe, pipe));
77
78 // Update the command line to enable the V2 sandbox and pass the
79 // communication FD to the helper executable.
80 command_line_->AppendSwitch(switches::kEnableV2Sandbox);
81 command_line_->AppendArg("--fd_mapping=" + std::to_string(pipe));
82 }
83
50 // fds_to_remap will de deleted in AfterLaunchOnLauncherThread() below. 84 // fds_to_remap will de deleted in AfterLaunchOnLauncherThread() below.
51 options->fds_to_remap = fds_to_map.release(); 85 options->fds_to_remap = fds_to_map.release();
52 86
53 // Hold the MachBroker lock for the duration of LaunchProcess. The child will 87 // Hold the MachBroker lock for the duration of LaunchProcess. The child will
54 // send its task port to the parent almost immediately after startup. The Mach 88 // send its task port to the parent almost immediately after startup. The Mach
55 // message will be delivered to the parent, but updating the record of the 89 // message will be delivered to the parent, but updating the record of the
56 // launch will wait until after the placeholder PID is inserted below. This 90 // launch will wait until after the placeholder PID is inserted below. This
57 // ensures that while the child process may send its port to the parent prior 91 // ensures that while the child process may send its port to the parent prior
58 // to the parent leaving LaunchProcess, the order in which the record in 92 // to the parent leaving LaunchProcess, the order in which the record in
59 // MachBroker is updated is correct. 93 // MachBroker is updated is correct.
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 base::File OpenFileToShare(const base::FilePath& path, 198 base::File OpenFileToShare(const base::FilePath& path,
165 base::MemoryMappedFile::Region* region) { 199 base::MemoryMappedFile::Region* region) {
166 // Not used yet (until required files are described in the service manifest on 200 // Not used yet (until required files are described in the service manifest on
167 // Mac). 201 // Mac).
168 NOTREACHED(); 202 NOTREACHED();
169 return base::File(); 203 return base::File();
170 } 204 }
171 205
172 } // namespace internal 206 } // namespace internal
173 } // namespace content 207 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/child_process_launcher_helper.h ('k') | content/browser/sandbox_parameters_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698