]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: quic: reject unknown frame type
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 15 Feb 2024 13:41:12 +0000 (14:41 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 15 Feb 2024 16:04:17 +0000 (17:04 +0100)
As specified by RFC 9000, connection is closed on error if an unknown
QUIC frame type is received.

Previously, a frame with unknown type was silently discarded. The
connection remained opened which is not conformant to the specification.

This should be backported up to 2.6.

src/quic_frame.c

index 61d2c935ec0e0e544071d1f91beb70cf9f07acf7..41309dbfe867fdaf844eaac7f91664d2214c6500 100644 (file)
@@ -13,7 +13,7 @@
 #include <haproxy/buf-t.h>
 #include <haproxy/chunk.h>
 #include <haproxy/pool.h>
-#include <haproxy/quic_conn-t.h>
+#include <haproxy/quic_conn.h>
 #include <haproxy/quic_enc.h>
 #include <haproxy/quic_frame.h>
 #include <haproxy/quic_rx-t.h>
@@ -1114,7 +1114,13 @@ int qc_parse_frm(struct quic_frame *frm, struct quic_rx_packet *pkt,
 
        frm->type = *(*pos)++;
        if (frm->type >= QUIC_FT_MAX) {
+               /* RFC 9000 12.4. Frames and Frame Types
+                *
+                * An endpoint MUST treat the receipt of a frame of unknown type as a
+                * connection error of type FRAME_ENCODING_ERROR.
+                */
                TRACE_DEVEL("wrong frame type", QUIC_EV_CONN_PRSFRM, qc, frm);
+               quic_set_connection_close(qc, quic_err_transport(QC_ERR_FRAME_ENCODING_ERROR));
                goto leave;
        }