From 5e56614acd875018ee48a28633f6d44f2712fb69 Mon Sep 17 00:00:00 2001 From: Ken Rockot Date: Fri, 19 Jan 2018 23:57:40 +0000 Subject: [PATCH] Make gamepad shm sharable read-only GamepadSharedBuffer was internally creating an anonymous shared memory object, prohibiting the object from being sharable as anything other than read-write on some platforms. This CL corrects the situation. Bug: 803768 Change-Id: I122d71753be2dd02d12e5bb9f23c1bfc71623f34 Reviewed-on: https://chromium-review.googlesource.com/877042 Reviewed-by: Reilly Grant Commit-Queue: Ken Rockot Cr-Commit-Position: refs/heads/master@{#530670} --- device/gamepad/gamepad_provider.cc | 4 ++-- device/gamepad/gamepad_shared_buffer.cc | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/device/gamepad/gamepad_provider.cc b/device/gamepad/gamepad_provider.cc index e2a273d36153..974237f33fa4 100644 --- a/device/gamepad/gamepad_provider.cc +++ b/device/gamepad/gamepad_provider.cc @@ -44,7 +44,7 @@ GamepadProvider::GamepadProvider( devices_changed_(true), ever_had_user_gesture_(false), sanitize_(true), - gamepad_shared_buffer_(new GamepadSharedBuffer()), + gamepad_shared_buffer_(std::make_unique()), connection_change_client_(connection_change_client) { Initialize(std::unique_ptr()); } @@ -57,7 +57,7 @@ GamepadProvider::GamepadProvider( devices_changed_(true), ever_had_user_gesture_(false), sanitize_(true), - gamepad_shared_buffer_(new GamepadSharedBuffer()), + gamepad_shared_buffer_(std::make_unique()), connection_change_client_(connection_change_client) { Initialize(std::move(fetcher)); } diff --git a/device/gamepad/gamepad_shared_buffer.cc b/device/gamepad/gamepad_shared_buffer.cc index ca82beada551..7d686acba9c9 100644 --- a/device/gamepad/gamepad_shared_buffer.cc +++ b/device/gamepad/gamepad_shared_buffer.cc @@ -7,8 +7,10 @@ namespace device { GamepadSharedBuffer::GamepadSharedBuffer() { - size_t data_size = sizeof(GamepadHardwareBuffer); - bool res = shared_memory_.CreateAndMapAnonymous(data_size); + base::SharedMemoryCreateOptions options; + options.size = sizeof(GamepadHardwareBuffer); + options.share_read_only = true; + bool res = shared_memory_.Create(options) && shared_memory_.Map(options.size); CHECK(res); void* mem = shared_memory_.memory();