[php-src] PR #23360: Detect immediate double-frees of zend_mm small slots

From: Date: Tue, 18 Aug 2026 21:24:30 +0000
Subject: [php-src] PR #23360: Detect immediate double-frees of zend_mm small slots
Groups: php.git-pulls 
Request: Send a blank email to git-pulls+get-37985@lists.php.net to get a copy of this message
Pull Request: https://github.com/php/php-src/pull/23360 Author: jvoisin Freeing the same small pointer twice in a row pushed it onto the freelist twice, so the next two allocations of that bin returned the same address. That's a nifty primitive to obtain two live pointers of different types to the same object. The shadow-pointer check does not catch it, as both links are consistent. This commit adds a simple check for when the freed pointer already is the head of the freelist. heap->free_slot[bin_num] is loaded by the very next line, so the check costs a single comparison on an already-hot value. This only catches consecutive double-frees, not a free after other activity on the same bin, but it doesn't cost ~anything performance wise, and catches real bugs like error/cleanup paths freeing the same value twice. A quick look at git log --grep='double.free' shows that this is a popular bug pattern.

« previous php.git-pulls (#37985) next »