Fix possible use-after-free in realpath_cache_clean() #7028
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix for https://bugs.php.net/bug.php?id=81068.
If ZTS is enabled, this can cause
cwd_globals_ctor()
to be called multiple times, each with a freshly allocatedvirtual_cwd_globals
instance. At shutdown time however,cwd_globals_dtor()
will callrealpath_cache_clean()
, which then possibly cleans up the samerealpath_cache
instance more than once. Using AddressSanitzer, this shows up as a heap use-after-free.To avoid this, add a helper function to do the actual work on one instance of a
realpath_cache
, and call it both fromcwd_globals_dtor()
andrealpath_cache_clean()
. The former uses thevirtual_cwd_globals
parameter passed in via the destructor, the latter uses theCWDG()
macro.