1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
$NetBSD: patch-js_src_jit_ProcessExecutableMemory.cpp,v 1.2 2021/02/23 17:02:04 ryoon Exp $
PaX MPROTECT safety for NetBSD.
--- js/src/jit/ProcessExecutableMemory.cpp.orig 2021-02-11 21:17:13.000000000 +0000
+++ js/src/jit/ProcessExecutableMemory.cpp
@@ -362,9 +362,16 @@ static void* ReserveProcessExecutableMem
// Note that randomAddr is just a hint: if the address is not available
// mmap will pick a different address.
void* randomAddr = ComputeRandomAllocationAddress();
+#ifdef PROT_MPROTECT
+ void* p = MozTaggedAnonymousMmap(randomAddr, bytes,
+ PROT_MPROTECT(PROT_EXEC | PROT_WRITE | PROT_READ),
+ MAP_PRIVATE | MAP_ANON, -1, 0,
+ "js-executable-memory");
+#else
void* p = MozTaggedAnonymousMmap(randomAddr, bytes, PROT_NONE,
MAP_NORESERVE | MAP_PRIVATE | MAP_ANON, -1,
0, "js-executable-memory");
+#endif
if (p == MAP_FAILED) {
return nullptr;
}
@@ -409,8 +416,12 @@ static unsigned ProtectionSettingToFlags
[[nodiscard]] static bool CommitPages(void* addr, size_t bytes,
ProtectionSetting protection) {
- void* p = MozTaggedAnonymousMmap(
- addr, bytes, ProtectionSettingToFlags(protection),
+ void* p = MozTaggedAnonymousMmap(addr, bytes,
+#ifdef PROT_MPROTECT
+ ProtectionSettingToFlags(protection) | PROT_MPROTECT(PROT_EXEC | PROT_WRITE | PROT_READ),
+#else
+ ProtectionSettingToFlags(protection),
+#endif
MAP_FIXED | MAP_PRIVATE | MAP_ANON, -1, 0, "js-executable-memory");
if (p == MAP_FAILED) {
return false;
|