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>
Wed, 1 Oct 2025 13:37:27 +0000 (15:37 +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>
(cherry picked from commit 3f6e0d887d30b9a2815d379d5fbf15470854aa65)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/quic_tx.c

index 2fcecf9..ea96857 100644 (file)
@@ -1679,6 +1679,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;
                }
@@ -1690,6 +1691,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;
        }