]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MAJOR: mux-quic: properly fix BUG_ON on empty STREAM emission
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 2 Jan 2025 09:59:43 +0000 (10:59 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 2 Jan 2025 10:25:40 +0000 (11:25 +0100)
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.

src/mux_quic.c

index e3fa05cb48ecb9cb5518bc9f4fdf074887900ced..98b3af41ddeb8d7a84360027a865149aa834a273 100644 (file)
@@ -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)) {