From e2549ddf7e4777f60254a437fb07b9ac60c1c5ab Mon Sep 17 00:00:00 2001 From: rdevshp Date: Sun, 10 May 2026 12:49:34 +0000 Subject: [PATCH] set PROT_NONE when mmap fails in regions_quarantine_deallocate_pages --- h_malloc.c | 2 ++ memory.c | 4 ++++ memory.h | 1 + 3 files changed, 7 insertions(+) diff --git a/h_malloc.c b/h_malloc.c index 88d50c9..4ebc2c3 100644 --- a/h_malloc.c +++ b/h_malloc.c @@ -1017,6 +1017,8 @@ static void regions_quarantine_deallocate_pages(void *p, size_t size, size_t gua if (unlikely(memory_purge(p, size))) { memset(p, 0, size); } + + memory_protect_none(p, size); } else { memory_set_name(p, size, "malloc large quarantine"); } diff --git a/memory.c b/memory.c index 58f6295..58833d1 100644 --- a/memory.c +++ b/memory.c @@ -77,6 +77,10 @@ static bool memory_protect_prot(void *ptr, size_t size, int prot, UNUSED int pke return ret; } +bool memory_protect_none(void *ptr, size_t size) { + return memory_protect_prot(ptr, size, PROT_NONE, -1); +} + bool memory_protect_ro(void *ptr, size_t size) { return memory_protect_prot(ptr, size, PROT_READ, -1); } diff --git a/memory.h b/memory.h index b115638..bb50c11 100644 --- a/memory.h +++ b/memory.h @@ -23,6 +23,7 @@ bool memory_map_fixed(void *ptr, size_t size); bool memory_map_fixed_mte(void *ptr, size_t size); #endif bool memory_unmap(void *ptr, size_t size); +bool memory_protect_none(void *ptr, size_t size); bool memory_protect_ro(void *ptr, size_t size); bool memory_protect_rw(void *ptr, size_t size); bool memory_protect_rw_metadata(void *ptr, size_t size);