vielite's blog

QA-13: Unconditional Timer Reset on Unknown Seqnum in complete_polled_requests

March 21, 2026
1 min read
Table of Contents
monad-qa-13-unconditional-timer-reset

Summary

complete_polled_requests resets the preload timer before confirming that the provided sequence number exists in the preload map.

Vulnerability details

2025-09-monad/bft/monad-eth-txpool-executor/src/preload.rs
pub fn complete_polled_requests(
&mut self,
predicted_proposal_seqnum: SeqNum,
requests: impl Iterator<Item = Address>,
) {
self.timer.set(tokio::time::sleep(Duration::from_millis(
PRELOAD_INTERVAL_MS,
)));
let Entry::Occupied(mut entry) = self.map.entry(predicted_proposal_seqnum) else {
warn!(?predicted_proposal_seqnum, "unknown seqnum");
return;
};

Impact

An attacker who can repeatedly trigger completions for unknown sequence numbers can keep pacing the timer and delay future preload batches.

Recommendation

Only reset the timer after the sequence number is validated and the map entry is known to exist.