Fix bug #66150: SOAP WSDL cache race condition causes Segmentation Fault#12469
Closed
ndossche wants to merge 2 commits intophp:PHP-8.1from
Closed
Fix bug #66150: SOAP WSDL cache race condition causes Segmentation Fault#12469ndossche wants to merge 2 commits intophp:PHP-8.1from
ndossche wants to merge 2 commits intophp:PHP-8.1from
Conversation
When we have two processes both trying to cache a WSDL, they might start writing the data to the same temporary file, causing file corruption due to the race condition. Fix this by creating a temporary file first, and then moving it to the final location. If moving fails then we know another process finished caching first. This also fixes #67617 as a consequence of its implementation.
dstogov
reviewed
Oct 19, 2023
ext/soap/php_sdl.c
Outdated
| /* To avoid race conditions, we first create a temporary file and then rename it atomically | ||
| * at the end of the function. (see bug #66150) */ | ||
| zend_string *temp_file_path; | ||
| f = php_open_temporary_fd_ex(NULL, "tmp.wsdl.", &temp_file_path, PHP_TMP_FILE_SILENT); |
Member
There was a problem hiding this comment.
I'm not sure if rename() may work for different volumes. It's better to create temporary file at the same directory.
Member
Author
There was a problem hiding this comment.
OK I changed first argument so that cache_dir is used, now they are in same directory.
dstogov
approved these changes
Oct 19, 2023
Member
Author
|
Thanks for review. |
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.
When we have two processes both trying to cache a WSDL, they might start writing the data to the same temporary file, causing file corruption due to the race condition. Fix this by creating a temporary file first, and then moving it to the final location. If moving fails then we know another process finished caching first.
This also fixes #67617 as a consequence of its implementation.