Re: [PATCH 1/3][v2] tcp: fix ICMP-RTO war: Check lower bound
From: David Miller <davem@davemloft.net>
Date: 2010-02-01 07:32:16
From: David Miller <davem@davemloft.net>
Date: 2010-02-01 07:32:16
From: Damian Lukowski <redacted> Date: Fri, 29 Jan 2010 23:15:54 +0100
diff --git a/include/net/tcp.h b/include/net/tcp.h index 34f5cc2..ff6cbaa 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h@@ -528,9 +528,12 @@ static inline void tcp_bound_rto(const struct sock *sk) inet_csk(sk)->icsk_rto = TCP_RTO_MAX; } +static inline u32 tcp_rto_min(struct sock *sk); static inline u32 __tcp_set_rto(const struct tcp_sock *tp) { - return (tp->srtt >> 3) + tp->rttvar; + u32 rto = (tp->srtt >> 3) + tp->rttvar; + u32 min = tcp_rto_min((struct sock *)tp); + return unlikely(rto < min) ? min : rto; } static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
Don't make assumptions about the layout and relationships between struct sock and struct tcp_sock without using the interfaces create for this purpose. For this case, simply add a "struct sock *" first argument to __tcp_set_rto() and update the callers. Thanks.