Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(489)

Side by Side Diff: base/memory/shared_memory_win.cc

Issue 412043002: Add a random name to anonymous shared memory sections (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/shared_memory.h" 5 #include "base/memory/shared_memory.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/rand_util.h"
9 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
9 11
10 namespace { 12 namespace {
11 13
12 // Returns the length of the memory section starting at the supplied address. 14 // Returns the length of the memory section starting at the supplied address.
13 size_t GetMemorySectionSize(void* address) { 15 size_t GetMemorySectionSize(void* address) {
14 MEMORY_BASIC_INFORMATION memory_info; 16 MEMORY_BASIC_INFORMATION memory_info;
15 if (!::VirtualQuery(address, &memory_info, sizeof(memory_info))) 17 if (!::VirtualQuery(address, &memory_info, sizeof(memory_info)))
16 return 0; 18 return 0;
17 return memory_info.RegionSize - (static_cast<char*>(address) - 19 return memory_info.RegionSize - (static_cast<char*>(address) -
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 if (options.size == 0) 109 if (options.size == 0)
108 return false; 110 return false;
109 111
110 // Check maximum accounting for overflow. 112 // Check maximum accounting for overflow.
111 if (options.size > 113 if (options.size >
112 static_cast<size_t>(std::numeric_limits<int>::max()) - kSectionMask) 114 static_cast<size_t>(std::numeric_limits<int>::max()) - kSectionMask)
113 return false; 115 return false;
114 116
115 size_t rounded_size = (options.size + kSectionMask) & ~kSectionMask; 117 size_t rounded_size = (options.size + kSectionMask) & ~kSectionMask;
116 name_ = ASCIIToWide(options.name_deprecated == NULL ? "" : 118 name_ = ASCIIToWide(options.name_deprecated == NULL ? "" :
117 *options.name_deprecated); 119 *options.name_deprecated);
120 if (name_.empty()) {
121 // Windows ignores DACLs on certain named objects (like shared sections).
122 // So, we generate a random one in case we need the DACL enforced.
123 uint64_t rand_values[4];
124 base::RandBytes(&rand_values, sizeof(rand_values));
125 name_ = base::StringPrintf(L"CrSharedMem_%016x%016x%016x%016x",
126 rand_values[0], rand_values[1],
127 rand_values[2], rand_values[3]);
128 }
118 mapped_file_ = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, 129 mapped_file_ = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
119 PAGE_READWRITE, 0, static_cast<DWORD>(rounded_size), 130 PAGE_READWRITE, 0, static_cast<DWORD>(rounded_size), name_.c_str());
cpu_(ooo_6.6-7.5) 2014/07/23 22:11:43 lgtm You are changing the name_ member, won't tha
jschuh 2014/07/23 22:19:39 There's no method to retrieve the name, so it shou
120 name_.empty() ? NULL : name_.c_str());
121 if (!mapped_file_) 131 if (!mapped_file_)
122 return false; 132 return false;
123 133
124 requested_size_ = options.size; 134 requested_size_ = options.size;
125 135
126 // Check if the shared memory pre-exists. 136 // Check if the shared memory pre-exists.
127 if (GetLastError() == ERROR_ALREADY_EXISTS) { 137 if (GetLastError() == ERROR_ALREADY_EXISTS) {
128 // If the file already existed, set requested_size_ to 0 to show that 138 // If the file already existed, set requested_size_ to 0 to show that
129 // we don't know the size. 139 // we don't know the size.
130 requested_size_ = 0; 140 requested_size_ = 0;
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 void SharedMemory::UnlockDeprecated() { 262 void SharedMemory::UnlockDeprecated() {
253 DCHECK(lock_ != NULL); 263 DCHECK(lock_ != NULL);
254 ReleaseMutex(lock_); 264 ReleaseMutex(lock_);
255 } 265 }
256 266
257 SharedMemoryHandle SharedMemory::handle() const { 267 SharedMemoryHandle SharedMemory::handle() const {
258 return mapped_file_; 268 return mapped_file_;
259 } 269 }
260 270
261 } // namespace base 271 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698