]> git.kaiwu.me - nginx.git/commitdiff
QUIC: fixed padding of initial packets in case of limited path.
authorVladimir Homutov <vl@nginx.com>
Wed, 2 Feb 2022 11:16:48 +0000 (14:16 +0300)
committerVladimir Homutov <vl@nginx.com>
Wed, 2 Feb 2022 11:16:48 +0000 (14:16 +0300)
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

index b34ca7855480afabb03e10c8bc926efc2422a283..103dd0e5ce68e461cff9537464fe2ce19410a6ce 100644 (file)
@@ -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);