From d73c5895f20a4bd9cc90f21c267aa87e0f06b236 Mon Sep 17 00:00:00 2001 From: Exverge Date: Thu, 8 Aug 2024 12:18:40 -0400 Subject: [PATCH] MemMapper: don't change address on non-reserved mappings --- src/util/MemMapper/MemMapperUnix.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/util/MemMapper/MemMapperUnix.cpp b/src/util/MemMapper/MemMapperUnix.cpp index 6ac4a4b4..630d7199 100644 --- a/src/util/MemMapper/MemMapperUnix.cpp +++ b/src/util/MemMapper/MemMapperUnix.cpp @@ -42,16 +42,15 @@ namespace MemMapper void* AllocateMemory(void* baseAddr, size_t size, PAGE_PERMISSION permissionFlags, bool fromReservation) { - uint64 page_size = sysconf(_SC_PAGESIZE); - if ((uint64) baseAddr % page_size != 0) - { - baseAddr = (void*) ((uint64)baseAddr & ~(page_size - 1)); - } void* r; if(fromReservation) { - if( mprotect(baseAddr, size, GetProt(permissionFlags)) == 0 ) + uint64 page_size = sysconf(_SC_PAGESIZE); + void* page = baseAddr; + if ( (uint64) baseAddr % page_size != 0 ) + page = (void*) ((uint64)baseAddr & ~(page_size - 1)); + if( mprotect(page, size, GetProt(permissionFlags)) == 0 ) r = baseAddr; else r = nullptr;