| 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 <string.h> | 7 #include <string.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 if (enable_nacl_debug) { | 876 if (enable_nacl_debug) { |
| 877 base::ProcessId pid = base::GetProcId(process_->GetData().handle); | 877 base::ProcessId pid = base::GetProcId(process_->GetData().handle); |
| 878 LOG(WARNING) << "nonsfi nacl plugin running in " << pid; | 878 LOG(WARNING) << "nonsfi nacl plugin running in " << pid; |
| 879 } | 879 } |
| 880 } else { | 880 } else { |
| 881 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); | 881 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); |
| 882 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); | 882 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); |
| 883 params.version = NaClBrowser::GetDelegate()->GetVersionString(); | 883 params.version = NaClBrowser::GetDelegate()->GetVersionString(); |
| 884 params.enable_debug_stub = enable_nacl_debug; | 884 params.enable_debug_stub = enable_nacl_debug; |
| 885 | 885 |
| 886 const ChildProcessData& data = process_->GetData(); | |
| 887 const base::File& irt_file = nacl_browser->IrtFile(); | 886 const base::File& irt_file = nacl_browser->IrtFile(); |
| 888 CHECK(irt_file.IsValid()); | 887 CHECK(irt_file.IsValid()); |
| 889 // Send over the IRT file handle. We don't close our own copy! | 888 // Send over the IRT file handle. We don't close our own copy! |
| 890 params.irt_handle = IPC::GetFileHandleForProcess( | 889 params.irt_handle = IPC::GetPlatformFileForTransit( |
| 891 irt_file.GetPlatformFile(), data.handle, false); | 890 irt_file.GetPlatformFile(), false); |
| 892 if (params.irt_handle == IPC::InvalidPlatformFileForTransit()) { | 891 if (params.irt_handle == IPC::InvalidPlatformFileForTransit()) { |
| 893 return false; | 892 return false; |
| 894 } | 893 } |
| 895 | 894 |
| 896 #if defined(OS_MACOSX) | 895 #if defined(OS_MACOSX) |
| 897 // For dynamic loading support, NaCl requires a file descriptor that | 896 // For dynamic loading support, NaCl requires a file descriptor that |
| 898 // was created in /tmp, since those created with shm_open() are not | 897 // was created in /tmp, since those created with shm_open() are not |
| 899 // mappable with PROT_EXEC. Rather than requiring an extra IPC | 898 // mappable with PROT_EXEC. Rather than requiring an extra IPC |
| 900 // round trip out of the sandbox, we create an FD here. | 899 // round trip out of the sandbox, we create an FD here. |
| 901 base::SharedMemory memory_buffer; | 900 base::SharedMemory memory_buffer; |
| 902 base::SharedMemoryCreateOptions options; | 901 base::SharedMemoryCreateOptions options; |
| 903 options.size = 1; | 902 options.size = 1; |
| 904 options.executable = true; | 903 options.executable = true; |
| 905 | 904 |
| 906 // NaCl expects a POSIX fd. | 905 // NaCl expects a POSIX fd. |
| 907 options.type = base::SharedMemoryHandle::POSIX; | 906 options.type = base::SharedMemoryHandle::POSIX; |
| 908 | 907 |
| 909 if (!memory_buffer.Create(options)) { | 908 if (!memory_buffer.Create(options)) { |
| 910 DLOG(ERROR) << "Failed to allocate memory buffer"; | 909 DLOG(ERROR) << "Failed to allocate memory buffer"; |
| 911 return false; | 910 return false; |
| 912 } | 911 } |
| 913 base::SharedMemoryHandle duped_handle = | 912 base::SharedMemoryHandle duped_handle = |
| 914 base::SharedMemory::DuplicateHandle(memory_buffer.handle()); | 913 base::SharedMemory::DuplicateHandle(memory_buffer.handle()); |
| 915 base::ScopedFD memory_fd( | 914 base::ScopedFD memory_fd( |
| 916 base::SharedMemory::GetFdFromSharedMemoryHandle(duped_handle)); | 915 base::SharedMemory::GetFdFromSharedMemoryHandle(duped_handle)); |
| 917 if (!memory_fd.is_valid()) { | 916 if (!memory_fd.is_valid()) { |
| 918 DLOG(ERROR) << "Failed to dup() a file descriptor"; | 917 DLOG(ERROR) << "Failed to dup() a file descriptor"; |
| 919 return false; | 918 return false; |
| 920 } | 919 } |
| 921 params.mac_shm_fd = IPC::GetFileHandleForProcess( | 920 params.mac_shm_fd = IPC::GetPlatformFileForTransit( |
| 922 memory_fd.release(), data.handle, true); | 921 memory_fd.release(), true); |
| 923 #endif | 922 #endif |
| 924 | 923 |
| 925 #if defined(OS_POSIX) | 924 #if defined(OS_POSIX) |
| 926 if (params.enable_debug_stub) { | 925 if (params.enable_debug_stub) { |
| 927 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); | 926 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); |
| 928 if (server_bound_socket != net::kInvalidSocket) { | 927 if (server_bound_socket != net::kInvalidSocket) { |
| 929 params.debug_stub_server_bound_socket = IPC::GetFileHandleForProcess( | 928 params.debug_stub_server_bound_socket = IPC::GetPlatformFileForTransit( |
| 930 server_bound_socket, data.handle, true); | 929 server_bound_socket, true); |
| 931 } | 930 } |
| 932 } | 931 } |
| 933 #endif | 932 #endif |
| 934 } | 933 } |
| 935 | 934 |
| 936 if (!crash_info_shmem_.ShareToProcess(process_->GetData().handle, | 935 if (!crash_info_shmem_.ShareToProcess(process_->GetData().handle, |
| 937 ¶ms.crash_info_shmem_handle)) { | 936 ¶ms.crash_info_shmem_handle)) { |
| 938 DLOG(ERROR) << "Failed to ShareToProcess() a shared memory buffer"; | 937 DLOG(ERROR) << "Failed to ShareToProcess() a shared memory buffer"; |
| 939 return false; | 938 return false; |
| 940 } | 939 } |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 NaClStartDebugExceptionHandlerThread( | 1337 NaClStartDebugExceptionHandlerThread( |
| 1339 std::move(process), info, base::ThreadTaskRunnerHandle::Get(), | 1338 std::move(process), info, base::ThreadTaskRunnerHandle::Get(), |
| 1340 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 1339 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
| 1341 weak_factory_.GetWeakPtr())); | 1340 weak_factory_.GetWeakPtr())); |
| 1342 return true; | 1341 return true; |
| 1343 } | 1342 } |
| 1344 } | 1343 } |
| 1345 #endif | 1344 #endif |
| 1346 | 1345 |
| 1347 } // namespace nacl | 1346 } // namespace nacl |
| OLD | NEW |