From f4e5a7c64438cfacbf9aba9c44911d1ff05961f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Mon, 17 Jan 2022 17:56:20 +0100 Subject: [PATCH] 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. --- src/xprt_quic.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index e5b7c7d62..2604f8367 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) {