fix memory poisoning for arenas allocated from an optional buffer

This commit is contained in:
Nikita Smith
2026-02-05 17:43:19 -08:00
parent dec5258c32
commit c81eafb656
+7 -2
View File
@@ -37,8 +37,13 @@ arena_alloc_(ArenaParams *params)
base = os_reserve(reserve_size); base = os_reserve(reserve_size);
os_commit(base, commit_size); os_commit(base, commit_size);
} }
AsanPoisonMemoryRegion(base, commit_size);
raddbg_annotate_vaddr_range(base, reserve_size, "arena %s:%i", params->allocation_site_file, params->allocation_site_line); raddbg_annotate_vaddr_range(base, reserve_size, "arena %s:%i", params->allocation_site_file, params->allocation_site_line);
} }
else
{
AsanPoisonMemoryRegion(base, params->reserve_size);
}
// rjf: panic on arena creation failure // rjf: panic on arena creation failure
#if OS_FEATURE_GRAPHICAL #if OS_FEATURE_GRAPHICAL
@@ -50,6 +55,7 @@ arena_alloc_(ArenaParams *params)
#endif #endif
// rjf: extract arena header & fill // rjf: extract arena header & fill
AsanUnpoisonMemoryRegion(base, ARENA_HEADER_SIZE);
Arena *arena = (Arena *)base; Arena *arena = (Arena *)base;
arena->current = arena; arena->current = arena;
arena->flags = params->flags; arena->flags = params->flags;
@@ -64,8 +70,6 @@ arena_alloc_(ArenaParams *params)
#if ARENA_FREE_LIST #if ARENA_FREE_LIST
arena->free_last = 0; arena->free_last = 0;
#endif #endif
AsanPoisonMemoryRegion(base, commit_size);
AsanUnpoisonMemoryRegion(base, ARENA_HEADER_SIZE);
return arena; return arena;
} }
@@ -161,6 +165,7 @@ arena_push(Arena *arena, U64 size, U64 align, B32 zero)
{ {
os_commit(cmt_ptr, cmt_size); os_commit(cmt_ptr, cmt_size);
} }
AsanPoisonMemoryRegion(cmt_ptr, cmt_size);
current->cmt = cmt_pst_clamped; current->cmt = cmt_pst_clamped;
} }