From: Amaury Denoyelle Date: Thu, 2 Jan 2025 09:59:43 +0000 (+0100) Subject: BUG/MAJOR: mux-quic: properly fix BUG_ON on empty STREAM emission X-Git-Tag: v3.2-dev3~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ddfd8031f895b448604cbc259f74e6cb7b086b0b;p=thirdparty%2Fhaproxy.git BUG/MAJOR: mux-quic: properly fix BUG_ON on empty STREAM emission Properly fix BUG_ON() occurence when QUIC MUX emits only empty STREAM frames. This was addressed by a previous patch but it causes another regression so a revert was needed. BUG_ON() on qcc_build_frms() return value is invalid. Indeed, qcc_build_frms() may return 0, but this does not imply that frame list is empty, as encoded frames can have a zero length payload. As such, simply remove this invalid BUG_ON(). This must be backported up to 3.1. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index e3fa05cb48..98b3af41dd 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -2389,7 +2389,9 @@ static int qcc_emit_rs_ss(struct qcc *qcc) * error occured during this step, this is considered as fatal. Tx frms is * cleared and 0 is returned. * - * Returns the sum of encoded STREAM frames length or 0 if no frame built. + * Returns the sum of encoded payload STREAM frames length. Note that 0 can be + * returned either if no frame was built or only empty payload frames were + * encoded. */ static int qcc_build_frms(struct qcc *qcc, struct list *qcs_failed) { @@ -2505,10 +2507,8 @@ static int qcc_io_send(struct qcc *qcc) /* Encode new STREAM frames if list has been previously cleared. */ if (LIST_ISEMPTY(frms) && !LIST_ISEMPTY(&qcc->send_list)) { total = qcc_build_frms(qcc, &qcs_failed); - if (!total) { - BUG_ON(!LIST_ISEMPTY(frms)); + if (LIST_ISEMPTY(frms)) goto out; - } } if (qcc_is_pacing_active(qcc->conn)) {