[AUDIT][Med/Low Severity] Fix race condition in state update for block building #3508
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.
Closes #<ISSUE_NUMBER>
This PR:
Hotshot initiates a block build request when a node is the leader of the next view. This process is handled via the
wait_for_block
function call. However, a race condition exists concerning the timing of reads and writes to thevalidated_state_map
.When
validate_proposal_safety_and_liveness
is called, it can update thevalidated_state_map
after theViewChange
from theupdate_view
function is processed. This results inwait_for_block
reading stale state as the parent during the while loop lookup.This PR fixes the issue by moving the
update_view
call to happen after the validated state update has occurred and it also adds another call site to the liveness branch.This PR does not:
Key places to review: