Index: head/www/firefox/files/patch-bug1550891 =================================================================== --- head/www/firefox/files/patch-bug1550891 (revision 522485) +++ head/www/firefox/files/patch-bug1550891 (revision 522486) @@ -1,77 +1,88 @@ commit 965eb33c5e86 Author: Greg V Date: Wed Jan 8 15:06:00 2020 -0800 Bug 1550891 - re-add SHM_ANON support in IPC shared memory, freezing via capabilities --- config/system-headers.mozbuild | 1 + - ipc/chromium/src/base/shared_memory_posix.cc | 16 +++++++++++++--- - 2 files changed, 14 insertions(+), 3 deletions(-) + ipc/chromium/src/base/shared_memory_posix.cc | 20 +++++++++++++++++--- + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git config/system-headers.mozbuild config/system-headers.mozbuild index 88afca1070f86..beff3e2542c9f 100644 --- config/system-headers.mozbuild +++ config/system-headers.mozbuild @@ -816,6 +816,7 @@ system_headers = [ 'sys/bitypes.h', 'sys/byteorder.h', 'syscall.h', + 'sys/capsicum.h', 'sys/cdefs.h', 'sys/cfgodm.h', 'sys/elf.h', diff --git ipc/chromium/src/base/shared_memory_posix.cc ipc/chromium/src/base/shared_memory_posix.cc -index 0be9cce0b4bed..6ef69686e1ca8 100644 +index 0be9cce0b4bed..89e67483e4c16 100644 --- ipc/chromium/src/base/shared_memory_posix.cc +++ ipc/chromium/src/base/shared_memory_posix.cc -@@ -148,7 +148,7 @@ static int SafeShmUnlink(bool freezeable, const char* name) { +@@ -16,6 +16,10 @@ + # include + #endif + ++#ifdef __FreeBSD__ ++# include ++#endif ++ + #include "base/eintr_wrapper.h" + #include "base/logging.h" + #include "base/string_util.h" +@@ -148,7 +152,7 @@ static int SafeShmUnlink(bool freezeable, const char* name) { } } -#elif !defined(ANDROID) +#elif !defined(ANDROID) && !defined(__FreeBSD__) static int SafeShmOpen(bool freezeable, const char* name, int oflag, int mode) { return shm_open(name, oflag, mode); } -@@ -160,7 +160,7 @@ static int SafeShmUnlink(bool freezeable, const char* name) { +@@ -160,7 +164,7 @@ static int SafeShmUnlink(bool freezeable, const char* name) { // static bool SharedMemory::AppendPosixShmPrefix(std::string* str, pid_t pid) { -#if defined(ANDROID) +#if defined(ANDROID) || defined(__FreeBSD__) return false; #else *str += '/'; -@@ -186,7 +186,7 @@ bool SharedMemory::AppendPosixShmPrefix(std::string* str, pid_t pid) { +@@ -186,7 +190,7 @@ bool SharedMemory::AppendPosixShmPrefix(std::string* str, pid_t pid) { // enough for this. StringAppendF(str, "org.mozilla.ipc.%d.", static_cast(pid)); return true; -#endif // !ANDROID +#endif // !ANDROID && !__FreeBSD__ } bool SharedMemory::CreateInternal(size_t size, bool freezeable) { -@@ -212,6 +212,9 @@ bool SharedMemory::CreateInternal(size_t size, bool freezeable) { +@@ -212,6 +216,9 @@ bool SharedMemory::CreateInternal(size_t size, bool freezeable) { return false; } needs_truncate = false; +#elif defined(__FreeBSD__) + // FreeBSD supports anonymous shm_open + fd.reset(shm_open(SHM_ANON, O_RDWR, 0600)); #else // Generic Unix: shm_open + shm_unlink do { -@@ -275,6 +278,13 @@ bool SharedMemory::Freeze() { +@@ -275,6 +282,13 @@ bool SharedMemory::Freeze() { CHROMIUM_LOG(WARNING) << "failed to freeze shm: " << strerror(errno); return false; } +#elif defined(__FreeBSD__) + cap_rights_t rights; + cap_rights_init(&rights, CAP_MMAP_R); + if (cap_rights_limit(mapped_file_, &rights) != 0) { + CHROMIUM_LOG(WARNING) << "failed to freeze shm: " << strerror(errno); + return false; + } #else DCHECK(frozen_file_ >= 0); DCHECK(mapped_file_ >= 0);