From 3b4d10caf6eb3cb7b86c1b6064869b935a7d0076 Mon Sep 17 00:00:00 2001 From: Vladimir Homutov Date: Wed, 2 Feb 2022 14:16:48 +0300 Subject: [PATCH] QUIC: fixed padding of initial packets in case of limited path. Previously, non-padded initial packet could be sent as a result of the following situation: - initial queue is not empty (so padding to 1200 is required) - handshake queue is not empty (so padding is to be added after h/s packet) - path is limited If serializing handshake packet would violate path limit, such packet was omitted, and the non-padded initial packet was sent. The fix is to avoid sending the packet at all in such case. This follows the original intention introduced in c5155a0cb12f. --- src/event/quic/ngx_event_quic_output.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/event/quic/ngx_event_quic_output.c b/src/event/quic/ngx_event_quic_output.c index b34ca7855..103dd0e5c 100644 --- a/src/event/quic/ngx_event_quic_output.c +++ b/src/event/quic/ngx_event_quic_output.c @@ -158,7 +158,14 @@ ngx_quic_create_datagrams(ngx_connection_t *c) ? NGX_QUIC_MIN_INITIAL_SIZE - (p - dst) : 0; if (min > len) { - continue; + /* padding can't be applied - avoid sending the packet */ + + for (i = 0; i < NGX_QUIC_SEND_CTX_LAST; i++) { + ctx = &qc->send_ctx[i]; + ngx_quic_revert_send(c, ctx, preserved_pnum[i]); + } + + return NGX_OK; } n = ngx_quic_output_packet(c, ctx, p, len, min);