From: Frédéric Lécaille Date: Mon, 17 Jan 2022 16:56:20 +0000 (+0100) Subject: MINOR: quic: Probe regardless of the congestion control X-Git-Tag: v2.6-dev1~113 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4e5a7c64438cfacbf9aba9c44911d1ff05961f4;p=thirdparty%2Fhaproxy.git MINOR: quic: Probe regardless of the congestion control When probing, we must not take into an account the congestion control window. This was not completely correctly implemented: qc_build_frms() could fail because of this limit when comparing the head of the packet againts the congestion control window. With this patch we make it fail only when we are not probing. --- diff --git a/src/xprt_quic.c b/src/xprt_quic.c index e5b7c7d62b..2604f83678 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -4617,17 +4617,23 @@ static inline int qc_build_frms(struct list *l, { int ret; struct quic_frame *cf, *cfbak; - size_t remain = quic_path_prep_data(qc->path); ret = 0; - if (*len > room || headlen > remain) + if (*len > room) return 0; /* If we are not probing we must take into an account the congestion * control window. */ - if (!qel->pktns->tx.pto_probe) - room = QUIC_MIN(room, quic_path_prep_data(qc->path) - headlen); + if (!qel->pktns->tx.pto_probe) { + size_t remain = quic_path_prep_data(qc->path); + + if (headlen > remain) + return 0; + + room = QUIC_MIN(room, remain - headlen); + } + TRACE_PROTO("************** frames build (headlen)", QUIC_EV_CONN_BCFRMS, qc, &headlen); list_for_each_entry_safe(cf, cfbak, &qel->pktns->tx.frms, list) {