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

Unified 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: read-only 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/shared_memory_win.cc
diff --git a/base/memory/shared_memory_win.cc b/base/memory/shared_memory_win.cc
index cc177ab3f2155625965c117b00947282d566af6d..3c1054fd5d3c5693981eeb979ece4c6999c12b06 100644
--- a/base/memory/shared_memory_win.cc
+++ b/base/memory/shared_memory_win.cc
@@ -5,6 +5,8 @@
#include "base/memory/shared_memory.h"
#include "base/logging.h"
+#include "base/rand_util.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
namespace {
@@ -114,10 +116,18 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
size_t rounded_size = (options.size + kSectionMask) & ~kSectionMask;
name_ = ASCIIToWide(options.name_deprecated == NULL ? "" :
- *options.name_deprecated);
+ *options.name_deprecated);
+ if (options.share_read_only && name_.empty()) {
+ // Windows ignores DACLs on certain unnamed objects (like shared sections).
+ // So, we generate a random name when we need to enforce read-only.
+ uint64_t rand_values[4];
+ base::RandBytes(&rand_values, sizeof(rand_values));
+ name_ = base::StringPrintf(L"CrSharedMem_%016x%016x%016x%016x",
+ rand_values[0], rand_values[1],
+ rand_values[2], rand_values[3]);
+ }
mapped_file_ = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
- PAGE_READWRITE, 0, static_cast<DWORD>(rounded_size),
- name_.empty() ? NULL : name_.c_str());
+ PAGE_READWRITE, 0, static_cast<DWORD>(rounded_size), name_.c_str());
if (!mapped_file_)
return false;
« 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