76494 bc high batcher submit pending spin loop halts all l1 batch submission
Description
Brief/Intro
Vulnerability Details
The defect: failure arm has no yield point and requeue rewinds the cursor
let candidate = match da_type {
DaType::Blob => match BlobEncoder::encode_packed(&frames) {
Ok(blob) => TxCandidate { /* ... */ },
Err(e) => {
warn!(error = %e, "failed to encode frames to blob, requeueing");
for id in ids {
pipeline.requeue(id); // rewinds the channel cursor
}
drop(permit); // releases the only outstanding permit
continue; // back to `loop {`, no .await
}
},
/* ... */
};
let handle = self.tx_manager.send_async(candidate).await; // the ONLY .awaitTrigger
Why the existing test_blob_encoding_failure_requeues_submission does not catch this
Impact Details
References
Link to Proof of Concept
Proof of Concept
Test 1 — poc_cycle_real_encoder_requeue_rewinds_forever
Test 2 — poc_exploit_submit_pending_spins
Previous75096 bc medium da backlog bytes incorrectly reports the backlogNext75597 bc insight lossy ingress metering fanout lets later lower fee transactions outrank earlier higher fee transactions under builder metering wait mode
Was this helpful?