cloudflare / cloudflare/quiche

Control frames not marked as lost on old path after migration

Open
#2,452 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
11.8k
Forks
1.1k
Avg merge
21h 9m
Merged PRs (30d)
6

Description

After migration, the server may have unacknowledged packets on the old path carrying control frames that are never retransmitted.

Neither retransmission mechanism covers these frames:

**ACK-based** loss detection does not fire on the old path.
On the old path, `newly_acked` is always empty so `on_ack_received` returns early without calling `detect_lost_packets`.

**PTO-based** retransmission skips control frames.
The PTO filter only selects packets where `has_data` is true, so control frames are excluded.

Affected frames are: `RESET_STREAM`, `STOP_SENDING`, `MAX_STREAM_DATA`, `MAX_DATA`, `MAX_STREAMS`, `RETIRE_CONNECTION_ID`, `NEW_CONNECTION_ID`

This can lead to **indefinite stalls**.

I will share my unit tests soon.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.