Fix critical race condition in permission loading for concurrent environments #2883
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.
This PR fixes a critical race condition vulnerability in the
PermissionRegistrar
class that affects applications running in concurrent environments (Laravel Octane, Swoole, RoadRunner, etc.).Problem
The
loadPermissions()
method had a Time-of-Check to Time-of-Use (TOCTOU) race condition where multiple concurrent requests could simultaneously pass theif ($this->permissions)
check before any of them loaded the permissions, causing:Solution
Implemented a thread-safe double-checked locking pattern:
$isLoadingPermissions
prevents concurrent loadingtry-finally
ensures flag is always releasedCode Changes
File:
src/PermissionRegistrar.php
private bool $isLoadingPermissions = false;
propertyloadPermissions()
with thread-safe implementationclearPermissionsCollection()
to reset the loading flag