diff --git a/src/z_zone.c b/src/z_zone.c index 9370bf4e39952f648312bc10300d8bbc9c18a80a..dabd68dfa40dd880400b53f03d3a8ffaf851d579 100644 --- a/src/z_zone.c +++ b/src/z_zone.c @@ -446,6 +446,7 @@ void Z_IterateTags(INT32 lowtag, INT32 hightag, boolean (*iterfunc)(void *)) for (block = head.next; block != &head; block = next) { + ASAN_UNPOISON_MEMORY_REGION(block, sizeof(memblock_t)); next = block->next; // get link before possibly freeing if (block->tag >= lowtag && block->tag <= hightag) @@ -454,6 +455,8 @@ void Z_IterateTags(INT32 lowtag, INT32 hightag, boolean (*iterfunc)(void *)) boolean free = iterfunc(mem); if (free) Z_Free(mem); + else + ASAN_POISON_MEMORY_REGION(block, sizeof(memblock_t)); } } } @@ -575,7 +578,7 @@ void Z_CheckHeap(INT32 i) #endif ); } - ASAN_POISON_MEMORY_REGION(block, sizeof(memblock_t)); + ASAN_UNPOISON_MEMORY_REGION(block, sizeof(memblock_t)); } }