]> git.baikalelectronics.ru Git - kernel.git/commit
tcp_cubic: fix spurious HYSTART_DELAY exit upon drop in min RTT
authorNeal Cardwell <ncardwell@google.com>
Wed, 24 Jun 2020 16:42:02 +0000 (12:42 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 25 Jun 2020 23:08:47 +0000 (16:08 -0700)
commitcf93fe1aa97621686c978b6ba16306b964802962
treee1a60ff57731ccc21100c62ad70dc8a6d4a8fb8b
parentfd86fc01bafe1e37f4fd84d112e610af95380c5e
tcp_cubic: fix spurious HYSTART_DELAY exit upon drop in min RTT

Mirja Kuehlewind reported a bug in Linux TCP CUBIC Hystart, where
Hystart HYSTART_DELAY mechanism can exit Slow Start spuriously on an
ACK when the minimum rtt of a connection goes down. From inspection it
is clear from the existing code that this could happen in an example
like the following:

o The first 8 RTT samples in a round trip are 150ms, resulting in a
  curr_rtt of 150ms and a delay_min of 150ms.

o The 9th RTT sample is 100ms. The curr_rtt does not change after the
  first 8 samples, so curr_rtt remains 150ms. But delay_min can be
  lowered at any time, so delay_min falls to 100ms. The code executes
  the HYSTART_DELAY comparison between curr_rtt of 150ms and delay_min
  of 100ms, and the curr_rtt is declared far enough above delay_min to
  force a (spurious) exit of Slow start.

The fix here is simple: allow every RTT sample in a round trip to
lower the curr_rtt.

Fixes: edf0faa01c66 ("[TCP] CUBIC v2.3")
Reported-by: Mirja Kuehlewind <mirja.kuehlewind@ericsson.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_cubic.c