From 89c4dc55a891519199f8e1f0d8a0c7338392d754 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 21 Dec 2018 00:54:55 +0300 Subject: [PATCH] Fix 'mprotect remapping failed' abort on NetBSD with PaX enabled Issue #255 (bdwgc). Without this patch, GC_remap() works on NetBSD which has the PaX feature only if PaX MPROTECT is off (sysctl -w security.pax.mprotect.enabled=0). * os_dep.c [USE_MUNMAP && !USE_WINALLOC && NETBSD] (GC_remap): Call mmap() instead of mprotect(). --- os_dep.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/os_dep.c b/os_dep.c index 6d01684b..32f3ea0d 100644 --- a/os_dep.c +++ b/os_dep.c @@ -2630,8 +2630,10 @@ GC_INNER void GC_remap(ptr_t start, size_t bytes) # else /* It was already remapped with PROT_NONE. */ { -# ifdef NACL +# if defined(NACL) || defined(NETBSD) /* NaCl does not expose mprotect, but mmap should work fine. */ + /* In case of NetBSD, mprotect fails (unlike mmap) even */ + /* without PROT_EXEC if PaX MPROTECT feature is enabled. */ void *result = mmap(start_addr, len, (PROT_READ | PROT_WRITE) | (GC_pages_executable ? PROT_EXEC : 0), MAP_PRIVATE | MAP_FIXED | OPT_MAP_ANON, -- 2.40.0