tcp: tcp_v4_err() should be more careful
[ Upstream commit 2c4cc9712364c051b1de2d175d5fbea6be948ebf ] ICMP handlers are not very often stressed, we should make them more resilient to bugs that might surface in the future. If there is no packet in retransmit queue, we should avoid a NULL deref. Signed-off-by: Eric Dumazet <edumazet@google.com> Reported-by: soukjin bae <soukjin.bae@samsung.com> Acked-by: Neal Cardwell <ncardwell@google.com> Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cb24fd565e
commit
209d8d25fd
@ -464,14 +464,15 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
|
||||
if (sock_owned_by_user(sk))
|
||||
break;
|
||||
|
||||
skb = tcp_write_queue_head(sk);
|
||||
if (WARN_ON_ONCE(!skb))
|
||||
break;
|
||||
|
||||
icsk->icsk_backoff--;
|
||||
icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) :
|
||||
TCP_TIMEOUT_INIT;
|
||||
icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX);
|
||||
|
||||
skb = tcp_write_queue_head(sk);
|
||||
BUG_ON(!skb);
|
||||
|
||||
remaining = icsk->icsk_rto -
|
||||
min(icsk->icsk_rto,
|
||||
tcp_time_stamp - tcp_skb_timestamp(skb));
|
||||
|
Loading…
x
Reference in New Issue
Block a user