diff --git a/h_malloc.c b/h_malloc.c index 88d50c9e..4ebc2c31 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 58f62958..58833d11 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 b1156386..bb50c112 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);