]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: quic: Do not ignore coalesced packets in qc_prep_fast_retrans()
authorFrédéric Lécaille <flecaille@haproxy.com>
Tue, 31 Jan 2023 09:10:06 +0000 (10:10 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 3 Feb 2023 16:55:55 +0000 (17:55 +0100)
This function is called only when probing only one packet number space
(Handshake) or two times the same one (Application). So, there is no risk
to prepare two times the same frame when uneeded because we wanted to
probe two packet number spaces. The condition "ignore the packets which
has been coalesced to another one" is not necessary. More importantly
the bug is when we want to prepare a Application packet which has
been coalesced to an Handshake packet. This is always the case when
the first Application packet is sent. It is always coalesced to
an Handshake packet with an ACK frame. So, when lost, this first
application packet was never resent. It contains the HANDSHAKE_DONE
frame to confirm the completion of the handshake to the client.

Must be backported to 2.6 and 2.7.

src/quic_conn.c

index e4f1d129008ffcc6b8536407c0f3cfdf668b15ba..a660eab1c14e8d51413474094c73fc7b4a95bfec 100644 (file)
@@ -2474,7 +2474,7 @@ static void qc_prep_fast_retrans(struct quic_conn *qc,
                TRACE_PRINTF(TRACE_LEVEL_DEVELOPER, QUIC_EV_CONN_SPPKTS, qc, 0, 0, 0,
                             "--> pn=%llu (%d %d)", (ull)pkt->pn_node.key,
                             LIST_ISEMPTY(&pkt->frms), !!(pkt->flags & QUIC_FL_TX_PACKET_COALESCED));
-               if (!LIST_ISEMPTY(&pkt->frms) && !(pkt->flags & QUIC_FL_TX_PACKET_COALESCED))
+               if (!LIST_ISEMPTY(&pkt->frms))
                        break;
        }