]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: quic: ensure empty packets are never built 20250812-ade-quic-fix-padding
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 12 Aug 2025 08:39:48 +0000 (10:39 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 12 Aug 2025 14:52:57 +0000 (16:52 +0200)
Previously, qc_do_build_pkt() had a special case when an empty packet
was generated. In this case, a PADDING frame was inserted. This specific
block was removed as padding support was centralized by the previous
patch.

However, such empty packets have no real purpose, and also are non
efficient. Add a BUG_ON() to ensure that caller never invoke
qc_do_build_pkt() if there is no data to emit.

qc_do_build_pkt() is a tedious function which already had some issues.
As such, this change is labelled as MEDIUM, as it is not 100% sure that
empty packet case is never encountered during emission.

src/quic_tx.c

index bfae52cd27930f2ab8cbdb0179efbcbaab018897..5452469ef27584c21b20b48db5ee71db5f6ccb25 100644 (file)
@@ -1937,6 +1937,9 @@ static int qc_do_build_pkt(unsigned char *pos, const unsigned char *end,
                dglen += 1;
        }
 
+       /* Caller must not try to build an empty packet. */
+       BUG_ON(LIST_ISEMPTY(&frm_list) && !add_ping_frm && !ack_frm_len && !cc);
+
        /* Handle Initial packet padding if necessary. */
        if (padding && dglen < QUIC_INITIAL_PACKET_MINLEN) {
                padding_len = QUIC_INITIAL_PACKET_MINLEN - dglen;