aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorFeoramund <161657516+Feoramund@users.noreply.github.com>2025-06-15 07:19:33 -0400
committerFeoramund <161657516+Feoramund@users.noreply.github.com>2025-06-15 12:34:16 -0400
commit78a10b462faa1fc0f84b7e2fdc4a6ff39f2a2e92 (patch)
treede36079d798d7520fcd4aac0cab49be4f444f832 /core
parentde3c32289974063f6aba63bd1b76082ef9a069ac (diff)
mem: Poison memory for `Dynamic_Arena`
Diffstat (limited to 'core')
-rw-r--r--core/mem/allocators.odin7
1 files changed, 7 insertions, 0 deletions
diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin
index 6f000a793..300b82d47 100644
--- a/core/mem/allocators.odin
+++ b/core/mem/allocators.odin
@@ -1734,6 +1734,7 @@ _dynamic_arena_cycle_new_block :: proc(a: ^Dynamic_Arena, loc := #caller_locatio
nil,
0,
)
+ sanitizer.address_poison(data)
new_block = raw_data(data)
}
a.bytes_left = a.block_size
@@ -1822,6 +1823,8 @@ dynamic_arena_alloc_bytes_non_zeroed :: proc(a: ^Dynamic_Arena, size: int, loc :
a.current_pos = ([^]byte)(a.current_pos)[n:]
a.bytes_left -= n
result := ([^]byte)(memory)[:size]
+ ensure_poisoned(result)
+ sanitizer.address_unpoison(result)
return result, nil
}
@@ -1833,10 +1836,12 @@ the unused blocks.
*/
dynamic_arena_reset :: proc(a: ^Dynamic_Arena, loc := #caller_location) {
if a.current_block != nil {
+ sanitizer.address_poison(a.current_block, a.block_size)
append(&a.unused_blocks, a.current_block, loc=loc)
a.current_block = nil
}
for block in a.used_blocks {
+ sanitizer.address_poison(block, a.block_size)
append(&a.unused_blocks, block, loc=loc)
}
clear(&a.used_blocks)
@@ -1856,6 +1861,7 @@ the unused blocks.
dynamic_arena_free_all :: proc(a: ^Dynamic_Arena, loc := #caller_location) {
dynamic_arena_reset(a)
for block in a.unused_blocks {
+ sanitizer.address_unpoison(block, a.block_size)
free(block, a.block_allocator, loc)
}
clear(&a.unused_blocks)
@@ -1965,6 +1971,7 @@ dynamic_arena_resize_bytes_non_zeroed :: proc(
old_memory := raw_data(old_data)
old_size := len(old_data)
if old_size >= size {
+ sanitizer.address_poison(old_data[size:])
return byte_slice(old_memory, size), nil
}
data, err := dynamic_arena_alloc_bytes_non_zeroed(a, size, loc)