From ceb88b8f46650e6915a852828e5be7bd350fa702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Mon, 20 Feb 2023 14:43:55 +0100 Subject: [PATCH] MINOR: quic: Add a BUG_ON_HOT() call for too small datagrams This should be helpful to detect too small datagrams: datagrams smaller than 1200 bytes, with Initial packets inside. Must be backported to 2.7. --- src/quic_conn.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/quic_conn.c b/src/quic_conn.c index dbcd4db76..d8bcb76f9 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -3523,6 +3523,15 @@ int qc_send_ppkts(struct buffer *buf, struct ssl_sock_ctx *ctx) time_sent = now_ms; for (pkt = first_pkt; pkt; pkt = next_pkt) { + /* RFC 9000 14.1 Initial datagram size + * a server MUST expand the payload of all UDP datagrams carrying ack-eliciting + * Initial packets to at least the smallest allowed maximum datagram size of + * 1200 bytes. + */ + BUG_ON_HOT(pkt->type == QUIC_PACKET_TYPE_INITIAL && + (pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING) && + dglen < QUIC_INITIAL_PACKET_MINLEN); + pkt->time_sent = time_sent; if (pkt->flags & QUIC_FL_TX_PACKET_ACK_ELICITING) { pkt->pktns->tx.time_of_last_eliciting = time_sent;