diff options
Diffstat (limited to 'www/chromium/files/patch-base_memory_platform__shared__memory__region__posix.cc')
-rw-r--r-- | www/chromium/files/patch-base_memory_platform__shared__memory__region__posix.cc | 88 |
1 files changed, 4 insertions, 84 deletions
diff --git a/www/chromium/files/patch-base_memory_platform__shared__memory__region__posix.cc b/www/chromium/files/patch-base_memory_platform__shared__memory__region__posix.cc index ac2e0f6b2691..a35c8d880061 100644 --- a/www/chromium/files/patch-base_memory_platform__shared__memory__region__posix.cc +++ b/www/chromium/files/patch-base_memory_platform__shared__memory__region__posix.cc @@ -1,18 +1,6 @@ ---- base/memory/platform_shared_memory_region_posix.cc.orig 2022-01-20 10:35:46 UTC +--- base/memory/platform_shared_memory_region_posix.cc.orig 2022-02-07 13:39:41 UTC +++ base/memory/platform_shared_memory_region_posix.cc -@@ -23,7 +23,11 @@ struct ScopedPathUnlinkerTraits { - static const FilePath* InvalidValue() { return nullptr; } - - static void Free(const FilePath* path) { -+#if defined(OS_BSD) -+ if (shm_unlink(path->value().c_str())) -+#else - if (unlink(path->value().c_str())) -+#endif - PLOG(WARNING) << "unlink"; - } - }; -@@ -70,7 +74,7 @@ FDPair ScopedFDPair::get() const { +@@ -70,7 +70,7 @@ FDPair ScopedFDPair::get() const { return {fd.get(), readonly_fd.get()}; } @@ -21,16 +9,7 @@ // static ScopedFD PlatformSharedMemoryRegion::ExecutableRegion::CreateFD(size_t size) { PlatformSharedMemoryRegion region = -@@ -79,7 +83,7 @@ ScopedFD PlatformSharedMemoryRegion::ExecutableRegion: - return region.PassPlatformHandle().fd; - return ScopedFD(); - } --#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) -+#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) - - // static - PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Take( -@@ -204,7 +208,7 @@ bool PlatformSharedMemoryRegion::MapAtInternal(off_t o +@@ -204,7 +204,7 @@ bool PlatformSharedMemoryRegion::MapAtInternal(off_t o // static PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Create(Mode mode, size_t size @@ -39,7 +18,7 @@ , bool executable #endif -@@ -233,7 +237,7 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion: +@@ -233,7 +233,7 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion: // flag. FilePath directory; if (!GetShmemTempDir( @@ -48,62 +27,3 @@ executable, #else false /* executable */, -@@ -242,6 +246,22 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion: - return {}; - } - -+#if defined(OS_BSD) -+ UnguessableToken token = UnguessableToken::Create(); -+ FilePath path = directory.Append(token.ToString()); -+ ScopedFD fd{HANDLE_EINTR(shm_open(path.value().c_str(), O_CREAT | O_RDWR, 0700))}; -+ File shm_file(fd.release()); -+ -+ if (!shm_file.IsValid()) { -+ PLOG(ERROR) << "Creating shared memory failed"; -+ return {}; -+ } -+ -+ if (HANDLE_EINTR(ftruncate(shm_file.GetPlatformFile(), size)) == -1) { -+ PLOG(ERROR) << "Failed to extend shared memory object to size " << size; -+ return {}; -+ } -+#else - FilePath path; - ScopedFD fd = CreateAndOpenFdForTemporaryFileInDir(directory, &path); - File shm_file(fd.release()); -@@ -258,6 +278,7 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion: - } - return {}; - } -+#endif // OS_BSD - - // Deleting the file prevents anyone else from mapping it in (making it - // private), and prevents the need for cleanup (once the last fd is -@@ -267,7 +288,11 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion: - ScopedFD readonly_fd; - if (mode == Mode::kWritable) { - // Also open as readonly so that we can ConvertToReadOnly(). -+#if defined(OS_BSD) -+ readonly_fd.reset(HANDLE_EINTR(shm_open(path.value().c_str(), O_RDONLY, 0400))); -+#else - readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY))); -+#endif - if (!readonly_fd.is_valid()) { - DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed"; - return {}; -@@ -298,9 +323,15 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion: - } - } - -+#if defined(OS_BSD) - return PlatformSharedMemoryRegion( - {ScopedFD(shm_file.TakePlatformFile()), std::move(readonly_fd)}, mode, -+ size, token); -+#else -+ return PlatformSharedMemoryRegion( -+ {ScopedFD(shm_file.TakePlatformFile()), std::move(readonly_fd)}, mode, - size, UnguessableToken::Create()); -+#endif // OS_BSD - #endif // !defined(OS_NACL) - } - |