Skip to content

Commit ebe8e03

Browse files
committed
BUG/MINOR: quic: Malforme probing packet with already acked frames
If a packet building was asked to probe the peer with frames which have just been acked, the frames building run by qc_build_frms() could be cancelled returning 0 by qc_stream_frm_is_acked() which ckeck that these frames have been already acknowledged. In this case the packet building run by qc_do_build_pkt() is not interrupted, leading to the build of an empty packet which should be ack-eliciting. This is a bug detected by the BUG_ON() statement in qc_do_build_pk(): BUG_ON(qel->pktns->tx.pto_probe && !(pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING)); Thank you to @Tristan971 for having reported this issue in GH #2709 This is an old bug which must be backported as far as 2.6.
1 parent 22bd92a commit ebe8e03

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/quic_tx.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2012,7 +2012,20 @@ static int qc_do_build_pkt(unsigned char *pos, const unsigned char *end,
20122012
goto comp_pkt_len;
20132013
}
20142014

2015-
if (!ack_frm_len && !qel->pktns->tx.pto_probe)
2015+
if (qel->pktns->tx.pto_probe) {
2016+
/* If a probing packets was asked and could not be built,
2017+
* this is not because there was not enough room, but due to
2018+
* its frames which were already acknowledeged.
2019+
* (see qc_stream_frm_is_acked()) called by qc_build_frms().
2020+
*
2021+
* That said, the consequence must be the same: cancelling
2022+
* the packet building as if there was not enough room.
2023+
*/
2024+
qel->pktns->tx.pto_probe--;
2025+
goto no_room;
2026+
}
2027+
2028+
if (!ack_frm_len)
20162029
goto no_room;
20172030
}
20182031
}

0 commit comments

Comments
 (0)