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
PermissionRegistrarclass 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:
$isLoadingPermissionsprevents concurrent loadingtry-finallyensures flag is always releasedCode Changes
File:
src/PermissionRegistrar.phpprivate bool $isLoadingPermissions = false;propertyloadPermissions()with thread-safe implementationclearPermissionsCollection()to reset the loading flag