From 158a3beb2e80ade00798051337cb46946c8f0a72 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 10 Jul 2023 22:55:02 +0300 Subject: [PATCH] partially clear object on free in debug mode catch some more of what valgrind would relatively cheaply --- src/opt/mm_buddy.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/opt/mm_buddy.c b/src/opt/mm_buddy.c index 62f5dcc7..b7053fb6 100644 --- a/src/opt/mm_buddy.c +++ b/src/opt/mm_buddy.c @@ -106,7 +106,7 @@ NOINLINE NORETURN void tailFail(u64 got, u64 exp, void* ptr, u64 off, int len, u void tailVerifyFree(void* ptr) { u64 filled; u64 ia; Arr* xa = ptr; u64 end = mm_size(ptr); - switch(PTY(xa)) { default: return; + switch(PTY(xa)) { default: goto clear; case t_bitarr: filled = BITARR_SZ(ia=PIA(xa)); break; case t_i8arr: filled = TYARR_SZ(I8, ia=PIA(xa)); break; case t_i16arr: filled = TYARR_SZ(I16, ia=PIA(xa)); break; @@ -123,6 +123,11 @@ void tailVerifyFree(void* ptr) { #define F(G, X, O, L) if ((G) != (X)) tailFail(G, X, ptr, O, L, filled, end, ia) ITER_TAIL(F) #undef F + + clear:; + u64 clr = end-8; + if (clr>256) clr = 256; + memset(ptr+8, 'a', clr); } #endif