diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/nacl/browser/nacl_host_message_filter.cc | 3 | ||||
-rw-r--r-- | components/nacl/browser/nacl_process_host.cc | 18 | ||||
-rw-r--r-- | components/nacl/browser/nacl_process_host.h | 3 | ||||
-rw-r--r-- | components/nacl/common/nacl_host_messages.h | 1 | ||||
-rw-r--r-- | components/nacl/common/nacl_messages.h | 2 | ||||
-rw-r--r-- | components/nacl/common/nacl_types.cc | 4 | ||||
-rw-r--r-- | components/nacl/common/nacl_types.h | 7 | ||||
-rw-r--r-- | components/nacl/loader/nacl_listener.cc | 4 | ||||
-rw-r--r-- | components/nacl/renderer/ppb_nacl_private_impl.cc | 12 |
9 files changed, 45 insertions, 9 deletions
diff --git a/components/nacl/browser/nacl_host_message_filter.cc b/components/nacl/browser/nacl_host_message_filter.cc index 2e5d473..92193dc 100644 --- a/components/nacl/browser/nacl_host_message_filter.cc +++ b/components/nacl/browser/nacl_host_message_filter.cc @@ -77,6 +77,7 @@ void NaClHostMessageFilter::OnLaunchNaCl( launch_params.render_view_id, launch_params.permission_bits, launch_params.uses_irt, + launch_params.uses_nonsfi_mode, launch_params.enable_dyncode_syscalls, launch_params.enable_exception_handling, launch_params.enable_crash_throttling, @@ -138,7 +139,7 @@ void NaClHostMessageFilter::AsyncReturnTemporaryFile( IPC::GetFileHandleForProcess(fd, PeerHandle(), false))); } -void NaClHostMessageFilter::OnNaClGetNumProcessors(int *num_processors) { +void NaClHostMessageFilter::OnNaClGetNumProcessors(int* num_processors) { *num_processors = base::SysInfo::NumberOfProcessors(); } diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc index d2b1ff1..3e93789 100644 --- a/components/nacl/browser/nacl_process_host.cc +++ b/components/nacl/browser/nacl_process_host.cc @@ -237,6 +237,7 @@ NaClProcessHost::NaClProcessHost(const GURL& manifest_url, int render_view_id, uint32 permission_bits, bool uses_irt, + bool uses_nonsfi_mode, bool enable_dyncode_syscalls, bool enable_exception_handling, bool enable_crash_throttling, @@ -254,6 +255,7 @@ NaClProcessHost::NaClProcessHost(const GURL& manifest_url, internal_(new NaClInternal()), weak_factory_(this), uses_irt_(uses_irt), + uses_nonsfi_mode_(uses_nonsfi_mode), enable_debug_stub_(false), enable_dyncode_syscalls_(enable_dyncode_syscalls), enable_exception_handling_(enable_exception_handling), @@ -762,8 +764,7 @@ bool NaClProcessHost::StartNaClExecution() { params.enable_ipc_proxy = enable_ppapi_proxy(); params.uses_irt = uses_irt_; params.enable_dyncode_syscalls = enable_dyncode_syscalls_; - params.enable_nonsfi_mode = CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableNaClNonSfiMode); + params.uses_nonsfi_mode = uses_nonsfi_mode_; const ChildProcessData& data = process_->GetData(); if (!ShareHandleToSelLdr(data.handle, @@ -813,6 +814,19 @@ bool NaClProcessHost::StartNaClExecution() { } #endif + if (params.uses_nonsfi_mode) { +#if defined(OS_LINUX) + const bool kNonSFIModeSupported = true; +#else + const bool kNonSFIModeSupported = false; +#endif + if (!kNonSFIModeSupported || + !CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableNaClNonSfiMode)) { + return false; + } + } + process_->Send(new NaClProcessMsg_Start(params)); internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; diff --git a/components/nacl/browser/nacl_process_host.h b/components/nacl/browser/nacl_process_host.h index f099313..9df7ade 100644 --- a/components/nacl/browser/nacl_process_host.h +++ b/components/nacl/browser/nacl_process_host.h @@ -50,6 +50,7 @@ class NaClProcessHost : public content::BrowserChildProcessHostDelegate { // render_view_id: RenderView routing id, to control access to private APIs. // permission_bits: controls which interfaces the NaCl plugin can use. // uses_irt: whether the launched process should use the IRT. + // uses_nonsfi_mode: whether the program should be loaded under non-SFI mode. // enable_dyncode_syscalls: whether the launched process should allow dyncode // and mmap with PROT_EXEC. // enable_exception_handling: whether the launched process should allow @@ -64,6 +65,7 @@ class NaClProcessHost : public content::BrowserChildProcessHostDelegate { int render_view_id, uint32 permission_bits, bool uses_irt, + bool uses_nonsfi_mode, bool enable_dyncode_syscalls, bool enable_exception_handling, bool enable_crash_throttling, @@ -200,6 +202,7 @@ class NaClProcessHost : public content::BrowserChildProcessHostDelegate { scoped_ptr<content::BrowserChildProcessHost> process_; bool uses_irt_; + bool uses_nonsfi_mode_; bool enable_debug_stub_; bool enable_dyncode_syscalls_; diff --git a/components/nacl/common/nacl_host_messages.h b/components/nacl/common/nacl_host_messages.h index 6918dc4..3a1e447 100644 --- a/components/nacl/common/nacl_host_messages.h +++ b/components/nacl/common/nacl_host_messages.h @@ -24,6 +24,7 @@ IPC_STRUCT_TRAITS_BEGIN(nacl::NaClLaunchParams) IPC_STRUCT_TRAITS_MEMBER(render_view_id) IPC_STRUCT_TRAITS_MEMBER(permission_bits) IPC_STRUCT_TRAITS_MEMBER(uses_irt) + IPC_STRUCT_TRAITS_MEMBER(uses_nonsfi_mode) IPC_STRUCT_TRAITS_MEMBER(enable_dyncode_syscalls) IPC_STRUCT_TRAITS_MEMBER(enable_exception_handling) IPC_STRUCT_TRAITS_MEMBER(enable_crash_throttling) diff --git a/components/nacl/common/nacl_messages.h b/components/nacl/common/nacl_messages.h index bfb8f4b..9f892be 100644 --- a/components/nacl/common/nacl_messages.h +++ b/components/nacl/common/nacl_messages.h @@ -24,7 +24,7 @@ IPC_STRUCT_TRAITS_BEGIN(nacl::NaClStartParams) IPC_STRUCT_TRAITS_MEMBER(enable_ipc_proxy) IPC_STRUCT_TRAITS_MEMBER(uses_irt) IPC_STRUCT_TRAITS_MEMBER(enable_dyncode_syscalls) - IPC_STRUCT_TRAITS_MEMBER(enable_nonsfi_mode) + IPC_STRUCT_TRAITS_MEMBER(uses_nonsfi_mode) IPC_STRUCT_TRAITS_END() //----------------------------------------------------------------------------- diff --git a/components/nacl/common/nacl_types.cc b/components/nacl/common/nacl_types.cc index acd49c0..50ea1b8 100644 --- a/components/nacl/common/nacl_types.cc +++ b/components/nacl/common/nacl_types.cc @@ -14,7 +14,7 @@ NaClStartParams::NaClStartParams() enable_ipc_proxy(false), uses_irt(false), enable_dyncode_syscalls(false), - enable_nonsfi_mode(false) { + uses_nonsfi_mode(false) { } NaClStartParams::~NaClStartParams() { @@ -33,6 +33,7 @@ NaClLaunchParams::NaClLaunchParams(const std::string& manifest_url, int render_view_id, uint32 permission_bits, bool uses_irt, + bool uses_nonsfi_mode, bool enable_dyncode_syscalls, bool enable_exception_handling, bool enable_crash_throttling) @@ -40,6 +41,7 @@ NaClLaunchParams::NaClLaunchParams(const std::string& manifest_url, render_view_id(render_view_id), permission_bits(permission_bits), uses_irt(uses_irt), + uses_nonsfi_mode(uses_nonsfi_mode), enable_dyncode_syscalls(enable_dyncode_syscalls), enable_exception_handling(enable_exception_handling), enable_crash_throttling(enable_crash_throttling) { diff --git a/components/nacl/common/nacl_types.h b/components/nacl/common/nacl_types.h index 29235ec..4adee9d 100644 --- a/components/nacl/common/nacl_types.h +++ b/components/nacl/common/nacl_types.h @@ -60,7 +60,7 @@ struct NaClStartParams { bool enable_ipc_proxy; bool uses_irt; bool enable_dyncode_syscalls; - bool enable_nonsfi_mode; + bool uses_nonsfi_mode; }; // Parameters sent to the browser process to have it launch a NaCl process. @@ -69,7 +69,9 @@ struct NaClStartParams { // nacl_host_messages.h. struct NaClLaunchParams { NaClLaunchParams(); - NaClLaunchParams(const std::string& u, int r, uint32 p, bool uses_irt, + NaClLaunchParams(const std::string& u, int r, uint32 p, + bool uses_irt, + bool uses_nonsfi_mode, bool enable_dyncode_syscalls, bool enable_exception_handling, bool enable_crash_throttling); @@ -80,6 +82,7 @@ struct NaClLaunchParams { int render_view_id; uint32 permission_bits; bool uses_irt; + bool uses_nonsfi_mode; bool enable_dyncode_syscalls; bool enable_exception_handling; bool enable_crash_throttling; diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc index f2d4be3..d2222ac 100644 --- a/components/nacl/loader/nacl_listener.cc +++ b/components/nacl/loader/nacl_listener.cc @@ -287,7 +287,7 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) { ppapi_renderer_handle = IPC::Channel::GenerateVerifiedChannelID("nacl"); #if defined(OS_LINUX) - if (params.enable_nonsfi_mode) { + if (params.uses_nonsfi_mode) { // In non-SFI mode, we neither intercept nor rewrite the message using // NaClIPCAdapter, and the channels are connected between the plugin and // the hosts directly. So, the IPC::Channel instances will be created in @@ -416,7 +416,7 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) { #endif #if defined(OS_LINUX) - if (params.enable_nonsfi_mode) { + if (params.uses_nonsfi_mode) { nacl::nonsfi::MainStart(args->imc_bootstrap_handle); NOTREACHED(); return; diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc index 7f7876c..a5103aa 100644 --- a/components/nacl/renderer/ppb_nacl_private_impl.cc +++ b/components/nacl/renderer/ppb_nacl_private_impl.cc @@ -106,6 +106,7 @@ void LaunchSelLdr(PP_Instance instance, const char* alleged_url, PP_Bool uses_irt, PP_Bool uses_ppapi, + PP_Bool uses_nonsfi_mode, PP_Bool enable_ppapi_dev, PP_Bool enable_dyncode_syscalls, PP_Bool enable_exception_handling, @@ -155,6 +156,7 @@ void LaunchSelLdr(PP_Instance instance, routing_id, perm_bits, PP_ToBool(uses_irt), + PP_ToBool(uses_nonsfi_mode), PP_ToBool(enable_dyncode_syscalls), PP_ToBool(enable_exception_handling), PP_ToBool(enable_crash_throttling)), @@ -300,6 +302,15 @@ int32_t GetNumberOfProcessors() { return num_processors; } +PP_Bool IsNonSFIModeEnabled() { +#if defined(OS_LINUX) + return PP_FromBool(CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableNaClNonSfiMode)); +#else + return PP_FALSE; +#endif +} + int32_t GetNexeFd(PP_Instance instance, const char* pexe_url, uint32_t abi_version, @@ -552,6 +563,7 @@ const PPB_NaCl_Private nacl_interface = { &GetReadonlyPnaclFD, &CreateTemporaryFile, &GetNumberOfProcessors, + &IsNonSFIModeEnabled, &GetNexeFd, &ReportTranslationFinished, &OpenNaClExecutable, |