Skip to content

[Security][tentative] Medium (correctness): Syncer Notarized Subscriber Wakeups Wait Behind Finalizer Mailbox #356

Description

@evonide

Context

The syncer stores verified block data and wakes application callers that are waiting on syncer.subscribe so proposal and verification work can continue once a requested block is locally available. The finalizer receives notarized-block updates from the syncer through a bounded mailbox for speculative finalization tracking.

These two consumers are independent for already cached blocks: application subscribers need the local block, while the finalizer update is a downstream notification. Normal syncer flow should not require finalizer mailbox progress before releasing subscribers for data the syncer already has.

Claim

During honest operation, finalizer mailbox backpressure can occur while syncer handles a notarization for a block already cached locally; while the actor is awaiting FinalizerMailbox::report, later syncer.subscribe messages for that block remain queued, so proposal or verification tasks can miss consensus deadlines despite the block already being available. The syncer awaits finalizer notarized-block reporting before it can process later mailbox work, including new subscriptions for the same already cached block.

Flow

The path is reachable when syncer handles a notarization or resolver-delivered notarized data for a block already present locally while the finalizer mailbox send is slow or blocked, and the application sends a subscription for that block after the syncer has entered the blocked report await. Existing subscribers registered before cache_block are not the affected set, because cache_block notifies them before the finalizer report.

Impact

Honest proposal or verification futures can miss consensus timeouts because later block subscription messages are queued behind speculative finalizer reporting. The impact is node-local syncer actor backpressure, not proof that subscribers already registered before the notarization are withheld until finalizer progress.

Root Cause

The syncer awaits the bounded finalizer mailbox send inside the same actor turn that should remain available to service later local block subscribers.

Code

Related Issues/PRs

The following existing items touch the same trust boundary, adjacent root cause, or likely remediation stack.

Note that #356 is wakeup ordering behind finalizer mailbox sends.

Fix

Avoid awaiting speculative finalizer notarized-block reporting on the syncer actor path that must continue receiving local subscriptions. Consider making NotarizedBlock finalizer delivery best-effort or independently buffered from subscriber serving. Add an integration test where finalizer mailbox backpressure does not delay a later syncer.subscribe response for an already cached notarized block.

Metadata

Metadata

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions