Index: chrome/browser/renderer_host/render_sandbox_host_linux.cc |
diff --git a/chrome/browser/renderer_host/render_sandbox_host_linux.cc b/chrome/browser/renderer_host/render_sandbox_host_linux.cc |
index ea8d024875379670388b26664b12cad8cbebe935..53c736cd36be17c7cd442ee3b6d5343ef507e3cf 100644 |
--- a/chrome/browser/renderer_host/render_sandbox_host_linux.cc |
+++ b/chrome/browser/renderer_host/render_sandbox_host_linux.cc |
@@ -19,6 +19,7 @@ |
#include "base/pickle.h" |
#include "base/process_util.h" |
#include "base/scoped_ptr.h" |
+#include "base/shared_memory.h" |
#include "base/string_util.h" |
#include "base/unix_domain_socket_posix.h" |
#include "chrome/common/sandbox_methods_linux.h" |
@@ -136,6 +137,8 @@ class SandboxIPCProcess { |
HandleGetChildWithInode(fd, pickle, iter, fds); |
} else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) { |
HandleGetStyleForStrike(fd, pickle, iter, fds); |
+ } else if (kind == LinuxSandbox::METHOD_MAKE_SHARED_MEMORY_SEGMENT) { |
+ HandleMakeSharedMemorySegment(fd, pickle, iter, fds); |
} |
error: |
@@ -329,6 +332,19 @@ class SandboxIPCProcess { |
SendRendererReply(fds, reply, -1); |
} |
+ void HandleMakeSharedMemorySegment(int fd, const Pickle& pickle, void* iter, |
+ std::vector<int>& fds) { |
+ uint32_t shm_size; |
+ if (!pickle.ReadUInt32(&iter, &shm_size)) |
+ return; |
+ int shm_fd = -1; |
+ base::SharedMemory shm; |
+ if (shm.Create(L"", false, false, shm_size)) |
+ shm_fd = shm.handle().fd; |
+ Pickle reply; |
+ SendRendererReply(fds, reply, shm_fd); |
+ } |
+ |
void SendRendererReply(const std::vector<int>& fds, const Pickle& reply, |
int reply_fd) { |
struct msghdr msg; |