]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
tcp: exit if nothing to retransmit on RTO timeout
authorYuchung Cheng <ycheng@google.com>
Wed, 16 Jan 2019 23:05:28 +0000 (15:05 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Dec 2019 08:21:34 +0000 (09:21 +0100)
commit 88f8598d0a302a08380eadefd09b9f5cb1c4c428 upstream.

Previously TCP only warns if its RTO timer fires and the
retransmission queue is empty, but it'll cause null pointer
reference later on. It's better to avoid such catastrophic failure
and simply exit with a warning.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Neal Cardwell <ncardwell@google.com>
Reviewed-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>
net/ipv4/tcp_timer.c

index 9d775b8df57d4fef4635e2f2fe62832633d86d50..c719a41d2eba22d7b90794fa3bebcb544fbe4215 100644 (file)
@@ -443,10 +443,8 @@ void tcp_retransmit_timer(struct sock *sk)
                 */
                return;
        }
-       if (!tp->packets_out)
-               goto out;
-
-       WARN_ON(tcp_rtx_queue_empty(sk));
+       if (!tp->packets_out || WARN_ON_ONCE(tcp_rtx_queue_empty(sk)))
+               return;
 
        tp->tlp_high_seq = 0;