Here are the tests I did with this new change I just mentioned. Note: By "full slab" I mean that I allocated every object in the slab and freed them. By "partial" I mean that I only allocated and freed some objects, but not every object in the slab, ie if the total objects can be 8 I only alloc-ed and freed 7. search == NULL - full slab - correct tail true - corrupted tail with garbage false - corrupted tail with valid address false - partial slab - correct tail true - corrupted tail with garbage true - corrupted tail with valid address false search == some fake address - full slab - correct tail false - corrupted tail with garbage false - corrupted tail with valid address false - partial slab - correct tail false - corrupted tail with garbage false - corrupted tail with valid address false search == some address in the freelist - full slab - correct tail true - corrupted tail with garbage true - corrupted tail with valid address true - partial slab - correct tail true - corrupted tail with garbage true - corrupted tail with valid address true I apologize if am going into too many details with my testing, I just wanna make sure I didn't miss anything. If my proposed changes look confusing I can send a proper patch. Should I send it in this chain as a reply, or send a new email and add you as well to the cc?