mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-05 22:12:16 +00:00
tcp: avoid possible arithmetic overflows
icsk_rto is a 32bit field, and icsk_backoff can reach 15 by default, or more if some sysctl (eg tcp_retries2) are changed. Better use 64bit to perform icsk_rto << icsk_backoff operations As Joe Perches suggested, add a helper for this. Yuchung spotted the tcp_v4_err() case. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
35f7aa5309
commit
fcdd1cf4dd
5 changed files with 23 additions and 14 deletions
|
@ -242,6 +242,15 @@ static inline void inet_csk_reset_xmit_timer(struct sock *sk, const int what,
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
inet_csk_rto_backoff(const struct inet_connection_sock *icsk,
|
||||
unsigned long max_when)
|
||||
{
|
||||
u64 when = (u64)icsk->icsk_rto << icsk->icsk_backoff;
|
||||
|
||||
return (unsigned long)min_t(u64, when, max_when);
|
||||
}
|
||||
|
||||
struct sock *inet_csk_accept(struct sock *sk, int flags, int *err);
|
||||
|
||||
struct request_sock *inet_csk_search_req(const struct sock *sk,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue