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)
committerDavid S. Miller <davem@davemloft.net>
Wed, 22 Feb 2017 21:35:58 +0000 (16:35 -0500)
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>
net/ipv4/tcp_minisocks.c

index dff7d2aaf8611e96da094097e1e153541b3e0119..7e16243cdb58c830f869fe483730e86400e2eb00 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);