Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1869)

Unified Diff: chrome/browser/nacl_host/nacl_process_host.cc

Issue 14750007: NaCl: enable meta-based validation for shared libraries. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/nacl_host/nacl_process_host.cc
diff --git a/chrome/browser/nacl_host/nacl_process_host.cc b/chrome/browser/nacl_host/nacl_process_host.cc
index 50d9616bf65694bc9b7557d231c8fd7526fe813b..5bed3a5bc093d456e01459d4ca6c5dccec92494e 100644
--- a/chrome/browser/nacl_host/nacl_process_host.cc
+++ b/chrome/browser/nacl_host/nacl_process_host.cc
@@ -623,6 +623,8 @@ bool NaClProcessHost::OnMessageReceived(const IPC::Message& msg) {
OnQueryKnownToValidate)
IPC_MESSAGE_HANDLER(NaClProcessMsg_SetKnownToValidate,
OnSetKnownToValidate)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClProcessMsg_ResolveFileNonce,
+ OnResolveFileNonce)
#if defined(OS_WIN)
IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClProcessMsg_AttachDebugExceptionHandler,
OnAttachDebugExceptionHandler)
@@ -761,7 +763,6 @@ bool NaClProcessHost::StartNaClExecution() {
if (params.uses_irt) {
base::PlatformFile irt_file = nacl_browser->IrtFile();
CHECK_NE(irt_file, base::kInvalidPlatformFileValue);
-
// Send over the IRT file handle. We don't close our own copy!
if (!ShareHandleToSelLdr(data.handle, irt_file, false, &params.handles))
return false;
@@ -930,6 +931,63 @@ void NaClProcessHost::OnSetKnownToValidate(const std::string& signature) {
NaClBrowser::GetInstance()->SetKnownToValidate(signature, off_the_record_);
}
+void NaClProcessHost::FileResolved(
+ base::PlatformFile* file,
+ const base::FilePath& file_path,
+ IPC::Message* reply_msg) {
+
+ if (*file != base::kInvalidPlatformFileValue) {
+ IPC::PlatformFileForTransit handle = IPC::GetFileHandleForProcess(
+ *file,
+ process_->GetData().handle,
+ true /* close_source */);
+ NaClProcessMsg_ResolveFileNonce::WriteReplyParams(
+ reply_msg,
+ handle,
+ file_path);
+ } else {
+ NaClProcessMsg_ResolveFileNonce::WriteReplyParams(
+ reply_msg,
+ IPC::InvalidPlatformFileForTransit(),
+ base::FilePath(FILE_PATH_LITERAL("")));
+ }
+ Send(reply_msg);
+}
+
+void NaClProcessHost::OnResolveFileNonce(uint64 nonce,
+ IPC::Message* reply_msg) {
+ // Was the file registered?
+ base::FilePath file_path;
+ if (!NaClBrowser::GetInstance()->GetFilePath(nonce, &file_path)){
bennet.yee 2013/05/16 01:52:48 this should never happen in normal operation -- an
Nick Bray (chromium) 2013/05/16 16:38:17 This could happen someone launches 10+ NaCl module
+ NaClProcessMsg_ResolveFileNonce::WriteReplyParams(
+ reply_msg,
+ IPC::InvalidPlatformFileForTransit(),
+ base::FilePath(FILE_PATH_LITERAL("")));
+ Send(reply_msg);
+ return;
+ }
+
+ // Scratch space to share between the callbacks.
+ base::PlatformFile* data = new base::PlatformFile();
+
+ // Open the file.
+ if (!content::BrowserThread::PostBlockingPoolTaskAndReply(
+ FROM_HERE,
+ base::Bind(nacl::OpenNaClExecutableImpl,
+ file_path, data),
+ base::Bind(&NaClProcessHost::FileResolved,
+ weak_factory_.GetWeakPtr(),
+ base::Owned(data),
+ file_path,
+ reply_msg))) {
+ NaClProcessMsg_ResolveFileNonce::WriteReplyParams(
+ reply_msg,
+ IPC::InvalidPlatformFileForTransit(),
+ base::FilePath(FILE_PATH_LITERAL("")));
+ Send(reply_msg);
+ }
+}
+
#if defined(OS_WIN)
void NaClProcessHost::OnAttachDebugExceptionHandler(const std::string& info,
IPC::Message* reply_msg) {

Powered by Google App Engine
This is Rietveld 408576698