]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: quic: Dysfunctional 01RTT packet number space probing
authorFrédéric Lécaille <flecaille@haproxy.com>
Mon, 20 Mar 2023 16:23:19 +0000 (17:23 +0100)
committerFrédéric Lécaille <flecaille@haproxy.com>
Mon, 20 Mar 2023 16:50:36 +0000 (17:50 +0100)
This bug arrived with this commit:
   "MINOR: quic: implement qc_notify_send()".
The ->tx.pto_probe variable was no more set when qc_processt_timer() the timer
task for the connection responsible of detecting packet loss and probing upon
PTO expiration leading to interrupted stream transfers. This was revealed by
blackhole interop failed tests where one could see that qc_process_timer()
was wakeup without traces as follows in the log file:
   "needs to probe 01RTT packet number space"

Must be backported to 2.7 and to 2.6 if the commit mentionned above
is backported to 2.6 in the meantime.

src/quic_conn.c

index f8c7816ec8fb5725c568949473a6de3895b60b5f..c67ae6d54aab6e4ee17daf4269da07db472e3f4c 100644 (file)
@@ -5158,7 +5158,10 @@ struct task *qc_process_timer(struct task *task, void *ctx, unsigned int state)
 
        if (qc->path->in_flight) {
                pktns = quic_pto_pktns(qc, qc->state >= QUIC_HS_ST_CONFIRMED, NULL);
-               if (!qc_notify_send(qc)) {
+               if (qc_notify_send(qc)) {
+                       pktns->tx.pto_probe = QUIC_MAX_NB_PTO_DGRAMS;
+               }
+               else {
                        if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) {
                                if (qc_may_probe_ipktns(qc)) {
                                        qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED;