summaryrefslogtreecommitdiffstats
path: root/chrome/browser/nacl_host
diff options
context:
space:
mode:
authormcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-01 23:19:31 +0000
committermcgrathr@chromium.org <mcgrathr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-01 23:19:31 +0000
commitb05df6b03e0d5dc552a96578ea6a8a7e47af407c (patch)
tree34a9231715fe019e140160b4046e50d76b6357e2 /chrome/browser/nacl_host
parenta84c55dab98485bb27156a7e99e464ceb9e7f311 (diff)
downloadchromium_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.cc5
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;