diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/nacl/browser/nacl_process_host.cc | 2 | ||||
-rw-r--r-- | components/nacl/loader/nacl_listener.cc | 44 |
2 files changed, 28 insertions, 18 deletions
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc index 89e3f80..98f3919 100644 --- a/components/nacl/browser/nacl_process_host.cc +++ b/components/nacl/browser/nacl_process_host.cc @@ -792,7 +792,7 @@ bool NaClProcessHost::StartNaClExecution() { NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); // Enable PPAPI proxy channel creation only for renderer processes. params.enable_ipc_proxy = enable_ppapi_proxy(); - params.uses_irt = uses_irt_; + params.uses_irt = uses_irt_ && !uses_nonsfi_mode_; params.enable_dyncode_syscalls = enable_dyncode_syscalls_; const ChildProcessData& data = process_->GetData(); diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc index 0d29487..db28dbf 100644 --- a/components/nacl/loader/nacl_listener.cc +++ b/components/nacl/loader/nacl_listener.cc @@ -270,17 +270,14 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) { NaClChromeMainSetUrandomFd(urandom_fd); #endif - NaClChromeMainInit(); - struct NaClChromeMainArgs *args = NaClChromeMainArgsCreate(); - if (args == NULL) { - LOG(ERROR) << "NaClChromeMainArgsCreate() failed"; - return; - } - - struct NaClApp *nap = NaClAppCreate(); - if (nap == NULL) { - LOG(ERROR) << "NaClAppCreate() failed"; - return; + struct NaClApp* nap = NULL; + if (!uses_nonsfi_mode_) { + NaClChromeMainInit(); + nap = NaClAppCreate(); + if (nap == NULL) { + LOG(ERROR) << "NaClAppCreate() failed"; + return; + } } IPC::ChannelHandle browser_handle; @@ -353,6 +350,25 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) { std::vector<nacl::FileDescriptor> handles = params.handles; +#if defined(OS_LINUX) + if (uses_nonsfi_mode_) { + if (params.uses_irt) { + LOG(ERROR) << "IRT must not be used for non-SFI NaCl."; + return; + } + CHECK(handles.size() == 1); + int imc_bootstrap_handle = nacl::ToNativeHandle(handles[0]); + nacl::nonsfi::MainStart(imc_bootstrap_handle); + return; + } +#endif + + struct NaClChromeMainArgs* args = NaClChromeMainArgsCreate(); + if (args == NULL) { + LOG(ERROR) << "NaClChromeMainArgsCreate() failed"; + return; + } + #if defined(OS_LINUX) || defined(OS_MACOSX) args->number_of_cores = number_of_cores_; args->create_memory_object_func = CreateMemoryObject; @@ -424,12 +440,6 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) { args->prereserved_sandbox_size = prereserved_sandbox_size_; #endif -#if defined(OS_LINUX) - if (uses_nonsfi_mode_) { - nacl::nonsfi::MainStart(args->imc_bootstrap_handle); - return; - } -#endif NaClChromeMainStartApp(nap, args); NOTREACHED(); } |