From: Ivan Maidanski Date: Thu, 20 Dec 2018 21:54:55 +0000 (+0300) Subject: Fix 'mprotect remapping failed' abort on NetBSD with PaX enabled X-Git-Tag: v8.0.2~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=89c4dc55a891519199f8e1f0d8a0c7338392d754;p=gc 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(). --- 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,