diff options
author | Eric Dumazet <edumazet@google.com> | 2013-04-19 07:19:48 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-19 14:21:53 -0400 |
commit | 12fb3dd9dc3c64ba7d64cec977cca9b5fb7b1d4e (patch) | |
tree | 81a5445ca74dfe73c0ecee78f9f5c16a4eef843f /net/irda | |
parent | 4394542ca4ec9f28c3c8405063d200b1e7c347d7 (diff) | |
download | talos-obmc-linux-12fb3dd9dc3c64ba7d64cec977cca9b5fb7b1d4e.tar.gz talos-obmc-linux-12fb3dd9dc3c64ba7d64cec977cca9b5fb7b1d4e.zip |
tcp: call tcp_replace_ts_recent() from tcp_ack()
commit bd090dfc634d (tcp: tcp_replace_ts_recent() should not be called
from tcp_validate_incoming()) introduced a TS ecr bug in slow path
processing.
1 A > B P. 1:10001(10000) ack 1 <nop,nop,TS val 1001 ecr 200>
2 B < A . 1:1(0) ack 1 win 257 <sack 9001:10001,TS val 300 ecr 1001>
3 A > B . 1:1001(1000) ack 1 win 227 <nop,nop,TS val 1002 ecr 200>
4 A > B . 1001:2001(1000) ack 1 win 227 <nop,nop,TS val 1002 ecr 200>
(ecr 200 should be ecr 300 in packets 3 & 4)
Problem is tcp_ack() can trigger send of new packets (retransmits),
reflecting the prior TSval, instead of the TSval contained in the
currently processed incoming packet.
Fix this by calling tcp_replace_ts_recent() from tcp_ack() after the
checks, but before the actions.
Reported-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/irda')
0 files changed, 0 insertions, 0 deletions