Repository navigation
Fix GH-23986: Clear the realpath cache in the child after pcntl_fork() - #23987
Merged
Merged
Conversation
Member
|
Thank you! |
pull Bot
pushed a commit
to dolfly/php-src
that referenced
this pull request
Sep 29, 2026
* PHP-8.4: Fix phpGH-23986: Clear the realpath cache in the child after pcntl_fork() (php#23987)
pull Bot
pushed a commit
to dolfly/php-src
that referenced
this pull request
Sep 29, 2026
* PHP-8.5: Fix phpGH-23986: Clear the realpath cache in the child after pcntl_fork() (php#23987)
bukka
added a commit
to bukka/php-src
that referenced
this pull request
Sep 29, 2026
* upstream/master: (99 commits) NEWS Fix property hook escape analysis causing misoptimization Fix __isset escape analysis causing misoptimization Fix memory leak when closing a statement on a killed connection Reset field_count for OK packet (php#23890) Fix phpGH-23986: Clear the realpath cache in the child after pcntl_fork() (php#23987) ext/standard: Remove redundant if-branch in rot13 (php#23795) ext/pdo: Throw a ValueError from bindColumn() for an unknown column (php#23835) Zend: rename zend_object* parameter to "this_ptr" for zend_call_* functions (php#23989) ext/pdo: Release driver options after bindParam and bindColumn tests: Raise test stack for stream error depth limit under MSan (php#23985) Zend: Remove zend_atomic.[ch] abstraction (php#23927) fibers: fix phpGH-23921 (Fibers start with error_reporting = 0 when the error_reporting INI directive is not set) ext/pdo: Keep statement class when ATTR_STATEMENT_CLASS is rejected Verify bundled sources using CI - Opcache JIT IR (php#20179) zend_portability: Simplify definition of `ZEND_NORETURN` (php#23908) Fix phpGH-23758: PDO_Firebird returns null for empty BLOBs (php#23763) Remove redundant parentheses in session tests (php#23609) Update IR (php#23861) Fix OSS-Fuzz #552682112: assertion failure wrt zp_arg_must_be_sent_by_ref() (php#23760) ... # Conflicts: # ext/openssl/xp_ssl.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The realpath cache survives fork(), so a path under /proc/self that the parent already resolved stays mapped to the parent's /proc/ in the child. Same goes for /proc/thread-self. The one-entry stat cache has the same problem, e.g. fileinode('/proc/self') in the child returns the parent's inode.
The child now does what clearstatcache(true) does right after the fork, next to the existing zend_max_execution_timer_init() call, in pcntl_fork(), pcntl_rfork() and pcntl_forkx(). I went with clearing in the child rather than skipping /proc paths in the realpath cache, since that would mean special-casing Linux paths in virtual_cwd and still leave the stat cache stale.
Fixes GH-23986