Index: base/shared_memory_unittest.cc |
diff --git a/base/shared_memory_unittest.cc b/base/shared_memory_unittest.cc |
index 9f69a5d7a942b4951d6ec76591913bfb2b15b149..940a47f3d8b808c1a0af127ffd742e15c8260425 100644 |
--- a/base/shared_memory_unittest.cc |
+++ b/base/shared_memory_unittest.cc |
@@ -15,6 +15,10 @@ |
#include "base/mac/scoped_nsautorelease_pool.h" |
#endif |
+#if defined(OS_POSIX) |
+#include <sys/mman.h> |
+#endif |
+ |
static const int kNumThreads = 5; |
static const int kNumTasks = 5; |
@@ -91,7 +95,7 @@ class MultipleLockThread : public PlatformThread::Delegate { |
{ |
SharedMemory memory1; |
EXPECT_TRUE(memory1.CreateNamed("SharedMemoryMultipleLockThreadTest", |
- true, kDataSize)); |
+ true, kDataSize, false)); |
EXPECT_TRUE(memory1.ShareToProcess(GetCurrentProcess(), &handle)); |
// TODO(paulg): Implement this once we have a posix version of |
// SharedMemory::ShareToProcess. |
@@ -332,6 +336,23 @@ TEST(SharedMemoryTest, AnonymousPrivate) { |
} |
} |
+#if defined(OS_POSIX) |
+// Create a shared memory object, mmap it, and mprotect it to PROT_EXEC. |
+TEST(SharedMemoryTest, AnonymousExecutable) { |
+ const uint32 kTestSize = 1 << 16; |
+ |
+ SharedMemory shared_memory; |
+ SharedMemoryCreateOptions options(kTestSize); |
+ options.executable = true; |
+ |
+ EXPECT_TRUE(shared_memory.Create(options)); |
+ EXPECT_TRUE(shared_memory.Map(shared_memory.created_size())); |
+ |
+ EXPECT_EQ(0, mprotect(shared_memory.memory(), shared_memory.created_size(), |
+ PROT_READ | PROT_EXEC)); |
+} |
+#endif |
+ |
// On POSIX it is especially important we test shmem across processes, |
// not just across threads. But the test is enabled on all platforms. |
class SharedMemoryProcessTest : public MultiProcessTest { |