Index: components/nacl/loader/nacl_listener.cc |
diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc |
index 18588bd6131001a91c9e0852f18c77963015665f..516395dd4af33eeec34c8c7da0d607f41240024f 100644 |
--- a/components/nacl/loader/nacl_listener.cc |
+++ b/components/nacl/loader/nacl_listener.cc |
@@ -5,6 +5,7 @@ |
#include "components/nacl/loader/nacl_listener.h" |
#include <errno.h> |
+#include <fcntl.h> |
#include <stdlib.h> |
#if defined(OS_POSIX) |
@@ -27,6 +28,7 @@ |
#include "native_client/src/public/chrome_main.h" |
#include "native_client/src/public/nacl_app.h" |
#include "native_client/src/public/nacl_file_info.h" |
+#include "native_client/src/trusted/service_runtime/include/sys/fcntl.h" |
#if defined(OS_POSIX) |
#include "base/file_descriptor_posix.h" |
@@ -37,7 +39,6 @@ |
#include "components/nacl/loader/nonsfi/nonsfi_main.h" |
#include "content/public/common/child_process_sandbox_support_linux.h" |
#include "native_client/src/trusted/desc/nacl_desc_io.h" |
-#include "native_client/src/trusted/service_runtime/include/sys/fcntl.h" |
#include "ppapi/nacl_irt/plugin_startup.h" |
#endif |
@@ -390,6 +391,22 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) { |
args->prereserved_sandbox_size = prereserved_sandbox_size_; |
#endif |
+ NaClFileInfo nexe_file_info; |
+ base::PlatformFile nexe_file = IPC::PlatformFileForTransitToPlatformFile( |
+ params.nexe_file); |
+#if defined(OS_WIN) |
+ nexe_file_info.desc = |
+ _open_osfhandle(reinterpret_cast<intptr_t>(nexe_file), |
+ _O_RDONLY | _O_BINARY); |
+#elif defined(OS_POSIX) |
+ nexe_file_info.desc = nexe_file; |
+#else |
+#error Unsupported target platform. |
+#endif |
+ nexe_file_info.file_token.lo = params.nexe_token_lo; |
+ nexe_file_info.file_token.hi = params.nexe_token_hi; |
+ args->nexe_desc = NaClDescIoFromFileInfo(nexe_file_info, NACL_ABI_O_RDONLY); |
+ |
NaClChromeMainStartApp(nap, args); |
} |
@@ -472,6 +489,8 @@ void NaClListener::StartNonSfi(const nacl::NaClStartParams& params) { |
CHECK(params.handles.empty()); |
CHECK(params.nexe_file != IPC::InvalidPlatformFileForTransit()); |
+ CHECK(params.nexe_token_lo == 0); |
+ CHECK(params.nexe_token_hi == 0); |
nacl::nonsfi::MainStart( |
NaClDescIoDescFromDescAllocCtor( |
IPC::PlatformFileForTransitToPlatformFile(params.nexe_file), |