Commit af772144 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

tcp: introduce TCP_PAWS_WRAP

tcp_paws_check() uses TCP_PAWS_24DAYS constant to detect if TCP TS
values might have wrapped after a long idle period.

This mechanism is described in RFC 7323 5.5 (Outdated Timestamps)

TCP_PAWS_24DAYS value was based on the assumption of a clock
of 1 Khz.

As we want to adopt a 1 Mhz clock in the future, we reduce
this constant.
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3d44de9a
...@@ -166,7 +166,12 @@ static_assert((1 << ATO_BITS) > TCP_DELACK_MAX); ...@@ -166,7 +166,12 @@ static_assert((1 << ATO_BITS) > TCP_DELACK_MAX);
#define MAX_TCP_KEEPCNT 127 #define MAX_TCP_KEEPCNT 127
#define MAX_TCP_SYNCNT 127 #define MAX_TCP_SYNCNT 127
#define TCP_PAWS_24DAYS (60 * 60 * 24 * 24) /* Ensure that TCP PAWS checks are relaxed after ~2147 seconds
* to avoid overflows. This assumes a clock smaller than 1 Mhz.
* Default clock is 1 Khz, tcp_usec_ts uses 1 Mhz.
*/
#define TCP_PAWS_WRAP (INT_MAX / USEC_PER_SEC)
#define TCP_PAWS_MSL 60 /* Per-host timestamps are invalidated #define TCP_PAWS_MSL 60 /* Per-host timestamps are invalidated
* after this time. It should be equal * after this time. It should be equal
* (or greater than) TCP_TIMEWAIT_LEN * (or greater than) TCP_TIMEWAIT_LEN
...@@ -1619,7 +1624,7 @@ static inline bool tcp_paws_check(const struct tcp_options_received *rx_opt, ...@@ -1619,7 +1624,7 @@ static inline bool tcp_paws_check(const struct tcp_options_received *rx_opt,
if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win) if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
return true; return true;
if (unlikely(!time_before32(ktime_get_seconds(), if (unlikely(!time_before32(ktime_get_seconds(),
rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS))) rx_opt->ts_recent_stamp + TCP_PAWS_WRAP)))
return true; return true;
/* /*
* Some OSes send SYN and SYNACK messages with tsval=0 tsecr=0, * Some OSes send SYN and SYNACK messages with tsval=0 tsecr=0,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment