cookie_tcp_reqsk_alloc() sets tcp_rsk(req)->req_usec_ts to false unconditionally. If want_cookie is true in tcp_conn_request(), we should not set tcp_rsk(req)->req_usec_ts. Let's not call dst_tcp_usec_ts() for SYN Cookie. Fixes: 614e8316aa4c ("tcp: add support for usec resolution in TCP TS values") Signed-off-by: Kuniyuki Iwashima --- net/ipv4/syncookies.c | 3 --- net/ipv4/tcp_input.c | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c index b5f0a65c6786..f5cd9e325d01 100644 --- a/net/ipv4/syncookies.c +++ b/net/ipv4/syncookies.c @@ -76,12 +76,9 @@ u64 cookie_init_timestamp(struct request_sock *req, u64 now) if (ts > ts_now) ts -= (1UL << TSBITS); - if (tcp_rsk(req)->req_usec_ts) - return ts * NSEC_PER_USEC; return ts * NSEC_PER_MSEC; } - static __u32 secure_tcp_syn_cookie(__be32 saddr, __be32 daddr, __be16 sport, __be16 dport, __u32 sseq, __u32 data) { diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index cba89733d121..8bf202b95c68 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -7720,7 +7720,8 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops, st = af_ops->init_seq_and_ts_off(net, skb); if (tmp_opt.tstamp_ok) { - tcp_rsk(req)->req_usec_ts = dst_tcp_usec_ts(dst); + if (!want_cookie) + tcp_rsk(req)->req_usec_ts = dst_tcp_usec_ts(dst); tcp_rsk(req)->ts_off = st.ts_off; } if (!want_cookie && !isn) { -- 2.54.0.rc1.513.gad8abe7a5a-goog