diff options
author | mcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-01 23:19:31 +0000 |
---|---|---|
committer | mcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-01 23:19:31 +0000 |
commit | b05df6b03e0d5dc552a96578ea6a8a7e47af407c (patch) | |
tree | 34a9231715fe019e140160b4046e50d76b6357e2 /chrome/browser/nacl_host | |
parent | a84c55dab98485bb27156a7e99e464ceb9e7f311 (diff) | |
download | chromium_src-b05df6b03e0d5dc552a96578ea6a8a7e47af407c.zip chromium_src-b05df6b03e0d5dc552a96578ea6a8a7e47af407c.tar.gz chromium_src-b05df6b03e0d5dc552a96578ea6a8a7e47af407c.tar.bz2 |
Give base::SharedMemory::CreateAnonymous an executable flag
NaCl on Mac and Linux needs to create a shared memory object that it can
later make executable with mprotect. Express this need in the interface it
uses. Add a test that pages mapped from such an object can later be passed
to mprotect with PROT_EXEC.
This lays the groundwork for a later change that will sometimes use a
different method to allocate an object on Linux when it needs to be
executable. On some Linux distributions, shm_open yields objects whose
mappings cannot be made executable.
BUG= http://code.google.com/p/chromium/issues/detail?id=103377
TEST= SharedMemory.AnonymousExecutable
R=mark@chromium.org,jam@chromium.org,amit@chromium.org,ben@chromium.org
Review URL: http://codereview.chromium.org/8585002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112570 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/nacl_host')
-rw-r--r-- | chrome/browser/nacl_host/nacl_process_host.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/chrome/browser/nacl_host/nacl_process_host.cc b/chrome/browser/nacl_host/nacl_process_host.cc index 8bc8b99..c84f416 100644 --- a/chrome/browser/nacl_host/nacl_process_host.cc +++ b/chrome/browser/nacl_host/nacl_process_host.cc @@ -492,7 +492,10 @@ void NaClProcessHost::SendStart(base::PlatformFile irt_file) { // mappable with PROT_EXEC. Rather than requiring an extra IPC // round trip out of the sandbox, we create an FD here. base::SharedMemory memory_buffer; - if (!memory_buffer.CreateAnonymous(/* size= */ 1)) { + base::SharedMemoryCreateOptions options; + options.size = 1; + options.executable = true; + if (!memory_buffer.Create(options)) { LOG(ERROR) << "Failed to allocate memory buffer"; delete this; return; |