In the InheritanceManager::nonReentrant
modifier, the transient storage key that is read and he transient storage that is loaded to are different.
The modifier InheritanceManager::nonReentrant
is used to implement a reentrancy guard using transient storage. The idea is that if the current transient storage slot value is 1, then this means the call is reentrant, and the function should execute; otherwise, the call can proceed.
However, in the current implementation, the modifier reads from transient storage key 1 but updates storage key 0. This inconsistency. Since transient storage key 1 is never updated, its value will always be zero; hence, if there are any reentrant calls, this modifier will not prevent them.
The modifier does to prevent any reentrancy vulnerabilities.
Manual review.
Write to and read from the same transient storage key:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.