# HG changeset patch # User Martin Duke # Date 1634029070 -10800 # Node ID c4f249d485e3bd78cdf0379f77002d6564e461a9 # Parent b5296bd8631ce6563aa0d7b1441eee0814aacd41 QUIC: attempt decrypt before checking for stateless reset. Checking the reset after encryption avoids false positives. More importantly, it avoids the check entirely in the usual case where decryption succeeds. RFC 9000, 10.3.1 Detecting a Stateless Reset Endpoints MAY skip this check if any packet from a datagram is successfully processed. diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c --- a/src/event/quic/ngx_event_quic.c +++ b/src/event/quic/ngx_event_quic.c @@ -804,8 +804,11 @@ ngx_quic_process_packet(ngx_connection_t return NGX_DECLINED; } - } else { + } + rc = ngx_quic_process_payload(c, pkt); + + if (rc == NGX_DECLINED && pkt->level == ssl_encryption_application) { if (ngx_quic_process_stateless_reset(c, pkt) == NGX_OK) { ngx_log_error(NGX_LOG_INFO, c->log, 0, "quic stateless reset packet detected"); @@ -817,7 +820,7 @@ ngx_quic_process_packet(ngx_connection_t } } - return ngx_quic_process_payload(c, pkt); + return rc; } /* packet does not belong to a connection */