]> git.hungrycats.org Git - linux/commitdiff
tcp: account for ts offset only if tsecr not zero
authorAlexey Kodanev <alexey.kodanev@oracle.com>
Wed, 22 Feb 2017 10:23:56 +0000 (13:23 +0300)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 5 Jun 2017 20:17:13 +0000 (21:17 +0100)
commit eee2faabc63d863a129000b698a2bca54dff643d upstream.

We can get SYN with zero tsecr, don't apply offset in this case.

Fixes: ee684b6f2830 ("tcp: send packets with a socket timestamp")
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/ipv4/tcp_minisocks.c

index 0c02551369929baefc76fc6d146fc9f3e55f9eed..93a731614f6a31187c7c3e14007010ed7efd394b 100644 (file)
@@ -101,7 +101,8 @@ tcp_timewait_state_process(struct inet_timewait_sock *tw, struct sk_buff *skb,
                tcp_parse_options(skb, &tmp_opt, 0, NULL);
 
                if (tmp_opt.saw_tstamp) {
-                       tmp_opt.rcv_tsecr       -= tcptw->tw_ts_offset;
+                       if (tmp_opt.rcv_tsecr)
+                               tmp_opt.rcv_tsecr -= tcptw->tw_ts_offset;
                        tmp_opt.ts_recent       = tcptw->tw_ts_recent;
                        tmp_opt.ts_recent_stamp = tcptw->tw_ts_recent_stamp;
                        paws_reject = tcp_paws_reject(&tmp_opt, th->rst);