wingo pushed a commit to branch wip-whippet
in repository guile.

commit 3c4fdfde0e3a6c4656d4a5d3fdbf2d4531ec9df7
Author: Andy Wingo <wi...@igalia.com>
AuthorDate: Wed Apr 23 10:42:05 2025 +0200

    Fix embarassing bug in which lack of MAP_FIXED meant unaligned slabs
    
    This would manifest itself in odd failures when accessing
    block/object metadata on slabs.
---
 src/gc-platform-gnu-linux.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gc-platform-gnu-linux.c b/src/gc-platform-gnu-linux.c
index 3ace1890d..e5fcb9804 100644
--- a/src/gc-platform-gnu-linux.c
+++ b/src/gc-platform-gnu-linux.c
@@ -162,12 +162,12 @@ gc_platform_acquire_memory_from_reservation(struct 
gc_reservation reservation,
   GC_ASSERT(size <= reservation.size);
   GC_ASSERT(offset <= reservation.size - size);
 
-  void *mem = mmap((void*)(reservation.base + offset), size,
-                   PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-  if (mem == MAP_FAILED) {
-    perror("mmap failed");
+  void *mem = (void*)(reservation.base + offset);
+  if (mprotect(mem, size, PROT_READ|PROT_WRITE)) {
+    perror("mprotect failed");
     return NULL;
   }
+  // FIXME: Should we gc_platform_populate_memory() here?
 
   return mem;
 }

Reply via email to