BUG/MINOR: quic: wrong QUIC_FT_CONNECTION_CLOSE(0x1c) frame encoding
authorFrederic Lecaille <flecaille@haproxy.com>
Mon, 23 Jun 2025 14:52:09 +0000 (16:52 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 26 Aug 2025 06:29:01 +0000 (08:29 +0200)
This is an old bug which was there since this commit:

     MINOR: quic: Avoid zeroing frame structures

It seems QUIC_FT_CONNECTION_CLOSE was confused with QUIC_FT_CONNECTION_CLOSE_APP
which does not include a "frame type" field. This field was not initialized
(so with a random value) which prevent the packet to be built because the
packet builder supposes the packet with such frames are very short.

Must be backported as far as 2.6.

(cherry picked from commit 1e6d8f199c9943eca13dec48e8676377356c81d0)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 1f73ddeb5c49ad6e742efb7deca305798dc43896)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/quic_tx.c

index e17e66c..1e6ab69 100644 (file)
@@ -1828,6 +1828,7 @@ static void qc_build_cc_frm(struct quic_conn *qc, struct quic_enc_level *qel,
                         * converting to a CONNECTION_CLOSE of type 0x1c.
                         */
                        out->type = QUIC_FT_CONNECTION_CLOSE;
+                       out->connection_close.frame_type = 0;
                        out->connection_close.error_code = QC_ERR_APPLICATION_ERROR;
                        out->connection_close.reason_phrase_len = 0;
                }
@@ -1839,6 +1840,7 @@ static void qc_build_cc_frm(struct quic_conn *qc, struct quic_enc_level *qel,
        }
        else {
                out->type = QUIC_FT_CONNECTION_CLOSE;
+               out->connection_close.frame_type = 0;
                out->connection_close.error_code = qc->err.code;
                out->connection_close.reason_phrase_len = 0;
        }