gfe-relnote: In QUIC, add exponential backoff for PTO timeout when there is not RTT measurement. Protected by gfe2_reloadable_flag_quic_enable_version_draft_25_v3 and gfe2_reloadable_flag_quic_enable_version_draft_27.
Also change PTO timeout from 2 * initial_rtt to 3 * initial_rtt.
PiperOrigin-RevId: 308102591
Change-Id: If44e9e7f6107b7a95650e5f4744ea847d2b998d2
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index c727d93..f0ee1a7 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -1169,10 +1169,11 @@
const QuicTime::Delta QuicSentPacketManager::GetProbeTimeoutDelay() const {
DCHECK(pto_enabled_);
if (rtt_stats_.smoothed_rtt().IsZero()) {
- if (rtt_stats_.initial_rtt().IsZero()) {
- return QuicTime::Delta::FromSeconds(1);
- }
- return 2 * rtt_stats_.initial_rtt();
+ // Respect kMinHandshakeTimeoutMs to avoid a potential amplification attack.
+ QUIC_BUG_IF(rtt_stats_.initial_rtt().IsZero());
+ return std::max(3 * rtt_stats_.initial_rtt(),
+ QuicTime::Delta::FromMilliseconds(kMinHandshakeTimeoutMs)) *
+ (1 << consecutive_pto_count_);
}
const QuicTime::Delta rtt_var = use_standard_deviation_for_pto_
? rtt_stats_.GetStandardOrMeanDeviation()