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));
 	}
 }