]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: quic: reject HANDSHAKE_DONE as server
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 14 Feb 2024 17:13:08 +0000 (18:13 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 15 Feb 2024 16:07:24 +0000 (17:07 +0100)
As specified in RFC 9000, a client must never emit a HANDSHAKE_DONE
frame. If this happens, the server must close the connection with error
PROTOCOL VIOLATION.

Previously, such a frame was silently discarded on server side. The
connection remained opened which is not conformant to the specification.

This should be backported up to 2.6.

src/quic_rx.c

index 3a1a35faa36da17ddf9d5417cdbf4f4ad03dae80..14f4ca26c5645a0937b37b3544315f97a7da1755 100644 (file)
@@ -1056,6 +1056,14 @@ static int qc_parse_pkt_frms(struct quic_conn *qc, struct quic_rx_packet *pkt,
                        if (qc_is_listener(qc)) {
                                TRACE_ERROR("non accepted QUIC_FT_HANDSHAKE_DONE frame",
                                            QUIC_EV_CONN_PRSHPKT, qc);
+
+                               /* RFC 9000 19.20. HANDSHAKE_DONE Frames
+                                *
+                                * A
+                                * server MUST treat receipt of a HANDSHAKE_DONE frame as a connection
+                                * error of type PROTOCOL_VIOLATION.
+                                */
+                               quic_set_connection_close(qc, quic_err_transport(QC_ERR_PROTOCOL_VIOLATION));
                                goto leave;
                        }