tcp: consolidate paws check
Wow, it was quite tricky to merge that stream of negations but I think I finally got it right: check & replace_ts_recent: (s32)(rcv_tsval - ts_recent) >= 0 => 0 (s32)(ts_recent - rcv_tsval) <= 0 => 0 discard: (s32)(ts_recent - rcv_tsval) > TCP_PAWS_WINDOW => 1 (s32)(ts_recent - rcv_tsval) <= TCP_PAWS_WINDOW => 0 I toggled the return values of tcp_paws_check around since the old encoding added yet-another negation making tracking of truth-values really complicated. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c43d558a51
commit
c887e6d2d9
@@ -997,11 +997,21 @@ static inline int tcp_fin_time(const struct sock *sk)
|
||||
return fin_timeout;
|
||||
}
|
||||
|
||||
static inline int tcp_paws_check(const struct tcp_options_received *rx_opt, int rst)
|
||||
static inline int tcp_paws_check(const struct tcp_options_received *rx_opt,
|
||||
int paws_win)
|
||||
{
|
||||
if ((s32)(rx_opt->rcv_tsval - rx_opt->ts_recent) >= 0)
|
||||
return 0;
|
||||
if (get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS)
|
||||
if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
|
||||
return 1;
|
||||
if (unlikely(get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int tcp_paws_reject(const struct tcp_options_received *rx_opt,
|
||||
int rst)
|
||||
{
|
||||
if (tcp_paws_check(rx_opt, 0))
|
||||
return 0;
|
||||
|
||||
/* RST segments are not recommended to carry timestamp,
|
||||
|
Reference in New Issue
Block a user