OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "components/nacl/browser/nacl_process_host.h" | 5 #include "components/nacl/browser/nacl_process_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
69 #include "components/nacl/browser/nacl_broker_service_win.h" | 69 #include "components/nacl/browser/nacl_broker_service_win.h" |
70 #include "components/nacl/common/nacl_debug_exception_handler_win.h" | 70 #include "components/nacl/common/nacl_debug_exception_handler_win.h" |
71 #include "content/public/common/sandbox_init.h" | 71 #include "content/public/common/sandbox_init.h" |
72 #endif | 72 #endif |
73 | 73 |
74 using content::BrowserThread; | 74 using content::BrowserThread; |
75 using content::ChildProcessData; | 75 using content::ChildProcessData; |
76 using content::ChildProcessHost; | 76 using content::ChildProcessHost; |
77 using ppapi::proxy::SerializedHandle; | 77 using ppapi::proxy::SerializedHandle; |
78 | 78 |
79 namespace nacl { | |
80 namespace { | |
81 | |
79 #if defined(OS_WIN) | 82 #if defined(OS_WIN) |
80 | 83 |
81 namespace { | |
82 | |
83 // Looks for the largest contiguous unallocated region of address | 84 // Looks for the largest contiguous unallocated region of address |
84 // space and returns it via |*out_addr| and |*out_size|. | 85 // space and returns it via |*out_addr| and |*out_size|. |
85 void FindAddressSpace(base::ProcessHandle process, | 86 void FindAddressSpace(base::ProcessHandle process, |
86 char** out_addr, size_t* out_size) { | 87 char** out_addr, size_t* out_size) { |
87 *out_addr = NULL; | 88 *out_addr = NULL; |
88 *out_size = 0; | 89 *out_size = 0; |
89 char* addr = 0; | 90 char* addr = 0; |
90 while (true) { | 91 while (true) { |
91 MEMORY_BASIC_INFORMATION info; | 92 MEMORY_BASIC_INFORMATION info; |
92 size_t result = VirtualQueryEx(process, static_cast<void*>(addr), | 93 size_t result = VirtualQueryEx(process, static_cast<void*>(addr), |
(...skipping 19 matching lines...) Expand all Loading... | |
112 if (*i == dir) | 113 if (*i == dir) |
113 return true; | 114 return true; |
114 } | 115 } |
115 return false; | 116 return false; |
116 } | 117 } |
117 | 118 |
118 #endif // _DLL | 119 #endif // _DLL |
119 | 120 |
120 } // namespace | 121 } // namespace |
121 | 122 |
122 namespace nacl { | |
123 | |
124 // Allocates |size| bytes of address space in the given process at a | 123 // Allocates |size| bytes of address space in the given process at a |
125 // randomised address. | 124 // randomised address. |
126 void* AllocateAddressSpaceASLR(base::ProcessHandle process, size_t size) { | 125 void* AllocateAddressSpaceASLR(base::ProcessHandle process, size_t size) { |
127 char* addr; | 126 char* addr; |
128 size_t avail_size; | 127 size_t avail_size; |
129 FindAddressSpace(process, &addr, &avail_size); | 128 FindAddressSpace(process, &addr, &avail_size); |
130 if (avail_size < size) | 129 if (avail_size < size) |
131 return NULL; | 130 return NULL; |
132 size_t offset = base::RandGenerator(avail_size - size); | 131 size_t offset = base::RandGenerator(avail_size - size); |
133 const int kPageSize = 0x10000; | 132 const int kPageSize = 0x10000; |
134 void* request_addr = | 133 void* request_addr = |
135 reinterpret_cast<void*>(reinterpret_cast<uint64>(addr + offset) | 134 reinterpret_cast<void*>(reinterpret_cast<uint64>(addr + offset) |
136 & ~(kPageSize - 1)); | 135 & ~(kPageSize - 1)); |
137 return VirtualAllocEx(process, request_addr, size, | 136 return VirtualAllocEx(process, request_addr, size, |
138 MEM_RESERVE, PAGE_NOACCESS); | 137 MEM_RESERVE, PAGE_NOACCESS); |
139 } | 138 } |
140 | 139 |
141 } // namespace nacl | |
142 | |
143 #endif // defined(OS_WIN) | |
144 | |
145 namespace { | 140 namespace { |
146 | 141 |
147 #if defined(OS_WIN) | |
148 bool RunningOnWOW64() { | 142 bool RunningOnWOW64() { |
149 return (base::win::OSInfo::GetInstance()->wow64_status() == | 143 return (base::win::OSInfo::GetInstance()->wow64_status() == |
150 base::win::OSInfo::WOW64_ENABLED); | 144 base::win::OSInfo::WOW64_ENABLED); |
151 } | 145 } |
152 #endif | 146 |
147 #endif // defined(OS_WIN) | |
Mark Seaborn
2014/09/11 20:43:26
Having #if/#endif nesting not nest with namespace{
| |
153 | 148 |
154 // NOTE: changes to this class need to be reviewed by the security team. | 149 // NOTE: changes to this class need to be reviewed by the security team. |
155 class NaClSandboxedProcessLauncherDelegate | 150 class NaClSandboxedProcessLauncherDelegate |
156 : public content::SandboxedProcessLauncherDelegate { | 151 : public content::SandboxedProcessLauncherDelegate { |
157 public: | 152 public: |
158 NaClSandboxedProcessLauncherDelegate(ChildProcessHost* host) | 153 NaClSandboxedProcessLauncherDelegate(ChildProcessHost* host) |
159 #if defined(OS_POSIX) | 154 #if defined(OS_POSIX) |
160 : ipc_fd_(host->TakeClientFileDescriptor()) | 155 : ipc_fd_(host->TakeClientFileDescriptor()) |
161 #endif | 156 #endif |
162 {} | 157 {} |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
226 nacl::FileDescriptor channel; | 221 nacl::FileDescriptor channel; |
227 channel.fd = sourceh; | 222 channel.fd = sourceh; |
228 channel.auto_close = close_source; | 223 channel.auto_close = close_source; |
229 handles_for_sel_ldr->push_back(channel); | 224 handles_for_sel_ldr->push_back(channel); |
230 #endif | 225 #endif |
231 return true; | 226 return true; |
232 } | 227 } |
233 | 228 |
234 } // namespace | 229 } // namespace |
235 | 230 |
236 namespace nacl { | |
237 | |
238 struct NaClProcessHost::NaClInternal { | |
239 NaClHandle socket_for_renderer; | |
240 NaClHandle socket_for_sel_ldr; | |
241 | |
242 NaClInternal() | |
243 : socket_for_renderer(NACL_INVALID_HANDLE), | |
244 socket_for_sel_ldr(NACL_INVALID_HANDLE) { } | |
245 }; | |
246 | |
247 // ----------------------------------------------------------------------------- | |
248 | |
249 unsigned NaClProcessHost::keepalive_throttle_interval_milliseconds_ = | 231 unsigned NaClProcessHost::keepalive_throttle_interval_milliseconds_ = |
250 ppapi::kKeepaliveThrottleIntervalDefaultMilliseconds; | 232 ppapi::kKeepaliveThrottleIntervalDefaultMilliseconds; |
251 | 233 |
252 NaClProcessHost::NaClProcessHost(const GURL& manifest_url, | 234 NaClProcessHost::NaClProcessHost(const GURL& manifest_url, |
253 base::File nexe_file, | 235 base::File nexe_file, |
254 const NaClFileToken& nexe_token, | 236 const NaClFileToken& nexe_token, |
255 ppapi::PpapiPermissions permissions, | 237 ppapi::PpapiPermissions permissions, |
256 int render_view_id, | 238 int render_view_id, |
257 uint32 permission_bits, | 239 uint32 permission_bits, |
258 bool uses_irt, | 240 bool uses_irt, |
259 bool uses_nonsfi_mode, | 241 bool uses_nonsfi_mode, |
260 bool enable_dyncode_syscalls, | 242 bool enable_dyncode_syscalls, |
261 bool enable_exception_handling, | 243 bool enable_exception_handling, |
262 bool enable_crash_throttling, | 244 bool enable_crash_throttling, |
263 bool off_the_record, | 245 bool off_the_record, |
264 const base::FilePath& profile_directory) | 246 const base::FilePath& profile_directory) |
265 : manifest_url_(manifest_url), | 247 : manifest_url_(manifest_url), |
266 nexe_file_(nexe_file.Pass()), | 248 nexe_file_(nexe_file.Pass()), |
267 nexe_token_(nexe_token), | 249 nexe_token_(nexe_token), |
268 permissions_(permissions), | 250 permissions_(permissions), |
269 #if defined(OS_WIN) | 251 #if defined(OS_WIN) |
270 process_launched_by_broker_(false), | 252 process_launched_by_broker_(false), |
271 #endif | 253 #endif |
272 reply_msg_(NULL), | 254 reply_msg_(NULL), |
273 #if defined(OS_WIN) | 255 #if defined(OS_WIN) |
274 debug_exception_handler_requested_(false), | 256 debug_exception_handler_requested_(false), |
275 #endif | 257 #endif |
276 internal_(new NaClInternal()), | |
277 uses_irt_(uses_irt), | 258 uses_irt_(uses_irt), |
278 uses_nonsfi_mode_(uses_nonsfi_mode), | 259 uses_nonsfi_mode_(uses_nonsfi_mode), |
279 enable_debug_stub_(false), | 260 enable_debug_stub_(false), |
280 enable_dyncode_syscalls_(enable_dyncode_syscalls), | 261 enable_dyncode_syscalls_(enable_dyncode_syscalls), |
281 enable_exception_handling_(enable_exception_handling), | 262 enable_exception_handling_(enable_exception_handling), |
282 enable_crash_throttling_(enable_crash_throttling), | 263 enable_crash_throttling_(enable_crash_throttling), |
283 off_the_record_(off_the_record), | 264 off_the_record_(off_the_record), |
284 profile_directory_(profile_directory), | 265 profile_directory_(profile_directory), |
285 render_view_id_(render_view_id), | 266 render_view_id_(render_view_id), |
286 weak_factory_(this) { | 267 weak_factory_(this) { |
(...skipping 19 matching lines...) Expand all Loading... | |
306 base::StringPrintf("NaCl process exited with status %i (0x%x)", | 287 base::StringPrintf("NaCl process exited with status %i (0x%x)", |
307 exit_code, exit_code); | 288 exit_code, exit_code); |
308 if (exit_code == 0) { | 289 if (exit_code == 0) { |
309 VLOG(1) << message; | 290 VLOG(1) << message; |
310 } else { | 291 } else { |
311 LOG(ERROR) << message; | 292 LOG(ERROR) << message; |
312 } | 293 } |
313 NaClBrowser::GetInstance()->OnProcessEnd(process_->GetData().id); | 294 NaClBrowser::GetInstance()->OnProcessEnd(process_->GetData().id); |
314 } | 295 } |
315 | 296 |
316 if (internal_->socket_for_renderer != NACL_INVALID_HANDLE) { | |
317 if (NaClClose(internal_->socket_for_renderer) != 0) { | |
318 NOTREACHED() << "NaClClose() failed"; | |
319 } | |
320 } | |
321 | |
322 if (internal_->socket_for_sel_ldr != NACL_INVALID_HANDLE) { | |
323 if (NaClClose(internal_->socket_for_sel_ldr) != 0) { | |
324 NOTREACHED() << "NaClClose() failed"; | |
325 } | |
326 } | |
327 | |
328 if (reply_msg_) { | 297 if (reply_msg_) { |
329 // The process failed to launch for some reason. | 298 // The process failed to launch for some reason. |
330 // Don't keep the renderer hanging. | 299 // Don't keep the renderer hanging. |
331 reply_msg_->set_reply_error(); | 300 reply_msg_->set_reply_error(); |
332 nacl_host_message_filter_->Send(reply_msg_); | 301 nacl_host_message_filter_->Send(reply_msg_); |
333 } | 302 } |
334 #if defined(OS_WIN) | 303 #if defined(OS_WIN) |
335 if (process_launched_by_broker_) { | 304 if (process_launched_by_broker_) { |
336 NaClBrokerService::GetInstance()->OnLoaderDied(); | 305 NaClBrokerService::GetInstance()->OnLoaderDied(); |
337 } | 306 } |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
461 // This means the sandboxed renderer cannot send handles to the | 430 // This means the sandboxed renderer cannot send handles to the |
462 // browser process. | 431 // browser process. |
463 | 432 |
464 NaClHandle pair[2]; | 433 NaClHandle pair[2]; |
465 // Create a connected socket | 434 // Create a connected socket |
466 if (NaClSocketPair(pair) == -1) { | 435 if (NaClSocketPair(pair) == -1) { |
467 SendErrorToRenderer("NaClSocketPair() failed"); | 436 SendErrorToRenderer("NaClSocketPair() failed"); |
468 delete this; | 437 delete this; |
469 return; | 438 return; |
470 } | 439 } |
471 internal_->socket_for_renderer = pair[0]; | 440 socket_for_renderer_ = base::File(pair[0]); |
472 internal_->socket_for_sel_ldr = pair[1]; | 441 socket_for_sel_ldr_ = base::File(pair[1]); |
473 SetCloseOnExec(pair[0]); | 442 SetCloseOnExec(pair[0]); |
474 SetCloseOnExec(pair[1]); | 443 SetCloseOnExec(pair[1]); |
475 } | 444 } |
476 | 445 |
477 // Create a shared memory region that the renderer and plugin share for | 446 // Create a shared memory region that the renderer and plugin share for |
478 // reporting crash information. | 447 // reporting crash information. |
479 crash_info_shmem_.CreateAnonymous(kNaClCrashInfoShmemSize); | 448 crash_info_shmem_.CreateAnonymous(kNaClCrashInfoShmemSize); |
480 | 449 |
481 // Launch the process | 450 // Launch the process |
482 if (!LaunchSelLdr()) { | 451 if (!LaunchSelLdr()) { |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
714 return false; | 683 return false; |
715 } | 684 } |
716 } | 685 } |
717 #endif | 686 #endif |
718 | 687 |
719 FileDescriptor imc_handle_for_renderer; | 688 FileDescriptor imc_handle_for_renderer; |
720 #if defined(OS_WIN) | 689 #if defined(OS_WIN) |
721 // Copy the handle into the renderer process. | 690 // Copy the handle into the renderer process. |
722 HANDLE handle_in_renderer; | 691 HANDLE handle_in_renderer; |
723 if (!DuplicateHandle(base::GetCurrentProcessHandle(), | 692 if (!DuplicateHandle(base::GetCurrentProcessHandle(), |
724 reinterpret_cast<HANDLE>( | 693 socket_for_renderer_.TakePlatformFile(), |
725 internal_->socket_for_renderer), | |
726 nacl_host_message_filter_->PeerHandle(), | 694 nacl_host_message_filter_->PeerHandle(), |
727 &handle_in_renderer, | 695 &handle_in_renderer, |
728 0, // Unused given DUPLICATE_SAME_ACCESS. | 696 0, // Unused given DUPLICATE_SAME_ACCESS. |
729 FALSE, | 697 FALSE, |
730 DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { | 698 DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { |
731 SendErrorToRenderer("DuplicateHandle() failed"); | 699 SendErrorToRenderer("DuplicateHandle() failed"); |
732 return false; | 700 return false; |
733 } | 701 } |
734 imc_handle_for_renderer = reinterpret_cast<FileDescriptor>( | 702 imc_handle_for_renderer = reinterpret_cast<FileDescriptor>( |
735 handle_in_renderer); | 703 handle_in_renderer); |
736 #else | 704 #else |
737 // No need to dup the imc_handle - we don't pass it anywhere else so | 705 // No need to dup the imc_handle - we don't pass it anywhere else so |
738 // it cannot be closed. | 706 // it cannot be closed. |
739 FileDescriptor imc_handle; | 707 FileDescriptor imc_handle; |
740 imc_handle.fd = internal_->socket_for_renderer; | 708 imc_handle.fd = socket_for_renderer_.TakePlatformFile(); |
741 imc_handle.auto_close = true; | 709 imc_handle.auto_close = true; |
742 imc_handle_for_renderer = imc_handle; | 710 imc_handle_for_renderer = imc_handle; |
743 #endif | 711 #endif |
744 | 712 |
745 const ChildProcessData& data = process_->GetData(); | 713 const ChildProcessData& data = process_->GetData(); |
746 base::SharedMemoryHandle crash_info_shmem_renderer_handle; | 714 base::SharedMemoryHandle crash_info_shmem_renderer_handle; |
747 if (!crash_info_shmem_.ShareToProcess(nacl_host_message_filter_->PeerHandle(), | 715 if (!crash_info_shmem_.ShareToProcess(nacl_host_message_filter_->PeerHandle(), |
748 &crash_info_shmem_renderer_handle)) { | 716 &crash_info_shmem_renderer_handle)) { |
749 SendErrorToRenderer("ShareToProcess() failed"); | 717 SendErrorToRenderer("ShareToProcess() failed"); |
750 return false; | 718 return false; |
751 } | 719 } |
752 | 720 |
753 SendMessageToRenderer( | 721 SendMessageToRenderer( |
754 NaClLaunchResult(imc_handle_for_renderer, | 722 NaClLaunchResult(imc_handle_for_renderer, |
755 ppapi_channel_handle, | 723 ppapi_channel_handle, |
756 trusted_channel_handle, | 724 trusted_channel_handle, |
757 manifest_service_channel_handle, | 725 manifest_service_channel_handle, |
758 base::GetProcId(data.handle), | 726 base::GetProcId(data.handle), |
759 data.id, | 727 data.id, |
760 crash_info_shmem_renderer_handle), | 728 crash_info_shmem_renderer_handle), |
761 std::string() /* error_message */); | 729 std::string() /* error_message */); |
762 internal_->socket_for_renderer = NACL_INVALID_HANDLE; | |
763 | 730 |
764 // Now that the crash information shmem handles have been shared with the | 731 // Now that the crash information shmem handles have been shared with the |
765 // plugin and the renderer, the browser can close its handle. | 732 // plugin and the renderer, the browser can close its handle. |
766 crash_info_shmem_.Close(); | 733 crash_info_shmem_.Close(); |
767 return true; | 734 return true; |
768 } | 735 } |
769 | 736 |
770 void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) { | 737 void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) { |
771 LOG(ERROR) << "NaCl process launch failed: " << error_message; | 738 LOG(ERROR) << "NaCl process launch failed: " << error_message; |
772 SendMessageToRenderer(NaClLaunchResult(), error_message); | 739 SendMessageToRenderer(NaClLaunchResult(), error_message); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
837 | 804 |
838 NaClStartParams params; | 805 NaClStartParams params; |
839 | 806 |
840 // Enable PPAPI proxy channel creation only for renderer processes. | 807 // Enable PPAPI proxy channel creation only for renderer processes. |
841 params.enable_ipc_proxy = enable_ppapi_proxy(); | 808 params.enable_ipc_proxy = enable_ppapi_proxy(); |
842 if (uses_nonsfi_mode_) { | 809 if (uses_nonsfi_mode_) { |
843 // Currently, non-SFI mode is supported only on Linux. | 810 // Currently, non-SFI mode is supported only on Linux. |
844 #if defined(OS_LINUX) | 811 #if defined(OS_LINUX) |
845 // In non-SFI mode, we do not use SRPC. Make sure that the socketpair is | 812 // In non-SFI mode, we do not use SRPC. Make sure that the socketpair is |
846 // not created. | 813 // not created. |
847 DCHECK_EQ(internal_->socket_for_sel_ldr, NACL_INVALID_HANDLE); | 814 DCHECK(!socket_for_sel_ldr_.IsValid()); |
848 #endif | 815 #endif |
849 } else { | 816 } else { |
850 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); | 817 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); |
851 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); | 818 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); |
852 params.version = NaClBrowser::GetDelegate()->GetVersionString(); | 819 params.version = NaClBrowser::GetDelegate()->GetVersionString(); |
853 params.enable_exception_handling = enable_exception_handling_; | 820 params.enable_exception_handling = enable_exception_handling_; |
854 params.enable_debug_stub = enable_debug_stub_ && | 821 params.enable_debug_stub = enable_debug_stub_ && |
855 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); | 822 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); |
856 params.uses_irt = uses_irt_; | 823 params.uses_irt = uses_irt_; |
857 params.enable_dyncode_syscalls = enable_dyncode_syscalls_; | 824 params.enable_dyncode_syscalls = enable_dyncode_syscalls_; |
858 | 825 |
859 // TODO(teravest): Resolve the file tokens right now instead of making the | 826 // TODO(teravest): Resolve the file tokens right now instead of making the |
860 // loader send IPC to resolve them later. | 827 // loader send IPC to resolve them later. |
861 params.nexe_token_lo = nexe_token_.lo; | 828 params.nexe_token_lo = nexe_token_.lo; |
862 params.nexe_token_hi = nexe_token_.hi; | 829 params.nexe_token_hi = nexe_token_.hi; |
863 | 830 |
864 const ChildProcessData& data = process_->GetData(); | 831 const ChildProcessData& data = process_->GetData(); |
865 if (!ShareHandleToSelLdr(data.handle, | 832 if (!ShareHandleToSelLdr(data.handle, |
866 internal_->socket_for_sel_ldr, true, | 833 socket_for_sel_ldr_.TakePlatformFile(), |
834 true, | |
867 ¶ms.handles)) { | 835 ¶ms.handles)) { |
868 return false; | 836 return false; |
869 } | 837 } |
870 | 838 |
871 if (params.uses_irt) { | 839 if (params.uses_irt) { |
872 const base::File& irt_file = nacl_browser->IrtFile(); | 840 const base::File& irt_file = nacl_browser->IrtFile(); |
873 CHECK(irt_file.IsValid()); | 841 CHECK(irt_file.IsValid()); |
874 // Send over the IRT file handle. We don't close our own copy! | 842 // Send over the IRT file handle. We don't close our own copy! |
875 if (!ShareHandleToSelLdr(data.handle, irt_file.GetPlatformFile(), false, | 843 if (!ShareHandleToSelLdr(data.handle, irt_file.GetPlatformFile(), false, |
876 ¶ms.handles)) { | 844 ¶ms.handles)) { |
(...skipping 28 matching lines...) Expand all Loading... | |
905 if (params.enable_debug_stub) { | 873 if (params.enable_debug_stub) { |
906 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); | 874 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); |
907 if (server_bound_socket != net::kInvalidSocket) { | 875 if (server_bound_socket != net::kInvalidSocket) { |
908 params.debug_stub_server_bound_socket = | 876 params.debug_stub_server_bound_socket = |
909 FileDescriptor(server_bound_socket, true); | 877 FileDescriptor(server_bound_socket, true); |
910 } | 878 } |
911 } | 879 } |
912 #endif | 880 #endif |
913 } | 881 } |
914 | 882 |
915 if (!uses_nonsfi_mode_) { | |
916 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; | |
917 } | |
918 | |
919 params.nexe_file = IPC::TakeFileHandleForProcess(nexe_file_.Pass(), | 883 params.nexe_file = IPC::TakeFileHandleForProcess(nexe_file_.Pass(), |
920 process_->GetData().handle); | 884 process_->GetData().handle); |
921 if (!crash_info_shmem_.ShareToProcess(process_->GetData().handle, | 885 if (!crash_info_shmem_.ShareToProcess(process_->GetData().handle, |
922 ¶ms.crash_info_shmem_handle)) { | 886 ¶ms.crash_info_shmem_handle)) { |
923 DLOG(ERROR) << "Failed to ShareToProcess() a shared memory buffer"; | 887 DLOG(ERROR) << "Failed to ShareToProcess() a shared memory buffer"; |
924 return false; | 888 return false; |
925 } | 889 } |
926 | 890 |
927 process_->Send(new NaClProcessMsg_Start(params)); | 891 process_->Send(new NaClProcessMsg_Start(params)); |
928 return true; | 892 return true; |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1227 process_handle.Take(), info, | 1191 process_handle.Take(), info, |
1228 base::MessageLoopProxy::current(), | 1192 base::MessageLoopProxy::current(), |
1229 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 1193 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
1230 weak_factory_.GetWeakPtr())); | 1194 weak_factory_.GetWeakPtr())); |
1231 return true; | 1195 return true; |
1232 } | 1196 } |
1233 } | 1197 } |
1234 #endif | 1198 #endif |
1235 | 1199 |
1236 } // namespace nacl | 1200 } // namespace nacl |
OLD | NEW |