Check `connected_` at the beginning of `TlsHandshaker::SetReadSecret`. If not connected, early return. Protected by FLAGS_quic_reloadable_flag_quic_check_connected_before_set_read_secret. PiperOrigin-RevId: 551287977
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h index f8c0828..e62564d 100644 --- a/quiche/quic/core/quic_flags_list.h +++ b/quiche/quic/core/quic_flags_list.h
@@ -37,6 +37,8 @@ QUIC_FLAG(quic_reloadable_flag_quic_allow_client_enabled_bbr_v2, true) // If true, an endpoint does not detect path degrading or blackholing until handshake gets confirmed. QUIC_FLAG(quic_reloadable_flag_quic_no_path_degrading_before_handshake_confirmed, true) +// If true, check connected at the beginning of TlsHandshaker::SetReadSecret. +QUIC_FLAG(quic_reloadable_flag_quic_check_connected_before_set_read_secret, false) // If true, clear QuicSpdyStreamBodyManager in QuicSpdyStream::CloseReadSide(). QUIC_FLAG(quic_reloadable_flag_quic_clear_body_manager, true) // If true, consider write blocked when destination CID is required but missing on the default path.
diff --git a/quiche/quic/core/tls_handshaker.cc b/quiche/quic/core/tls_handshaker.cc index fa92057..7415441 100644 --- a/quiche/quic/core/tls_handshaker.cc +++ b/quiche/quic/core/tls_handshaker.cc
@@ -288,7 +288,17 @@ bool TlsHandshaker::SetReadSecret(EncryptionLevel level, const SSL_CIPHER* cipher, absl::Span<const uint8_t> read_secret) { - QUIC_DVLOG(1) << ENDPOINT << "SetReadSecret level=" << level; + QUIC_DVLOG(1) << ENDPOINT << "SetReadSecret level=" << level + << ", connection_closed=" << is_connection_closed(); + if (check_connected_before_set_read_secret_) { + if (is_connection_closed()) { + QUIC_RELOADABLE_FLAG_COUNT_N(quic_check_connected_before_set_read_secret, + 1, 2); + return false; + } + QUIC_RELOADABLE_FLAG_COUNT_N(quic_check_connected_before_set_read_secret, 2, + 2); + } std::unique_ptr<QuicDecrypter> decrypter = QuicDecrypter::CreateFromCipherSuite(SSL_CIPHER_get_id(cipher)); const EVP_MD* prf = Prf(cipher);
diff --git a/quiche/quic/core/tls_handshaker.h b/quiche/quic/core/tls_handshaker.h index 8c1651c..0c7aa5d 100644 --- a/quiche/quic/core/tls_handshaker.h +++ b/quiche/quic/core/tls_handshaker.h
@@ -205,6 +205,8 @@ int expected_ssl_error_ = SSL_ERROR_WANT_READ; bool is_connection_closed_ = false; + const bool check_connected_before_set_read_secret_ = + GetQuicReloadableFlag(quic_check_connected_before_set_read_secret); QuicCryptoStream* stream_; HandshakerDelegateInterface* handshaker_delegate_;