From 0f8bbe98f16191006c4baa3789043d8854aefd60 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 16 Apr 2025 09:49:38 +0000 Subject: [PATCH] Revert "tcp: fix forever orphan socket caused by tcp_abort" This reverts commit b753821e069413d801a7c6df3c0b45cff2b443ad which is commit bac76cf89816bff06c4ec2f3df97dc34e150a1c4 upstream. It breaks Android testing and can be brought back in the future in an safe way if it is really needed. Bug: 411037744 Change-Id: I8a0f8b55aa851ea12f13f76ee45d705b1433cd42 Signed-off-by: Greg Kroah-Hartman --- net/ipv4/tcp.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 685fedffdad4..096fd6309077 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4729,12 +4729,6 @@ int tcp_abort(struct sock *sk, int err) /* Don't race with userspace socket closes such as tcp_close. */ lock_sock(sk); - /* Avoid closing the same socket twice. */ - if (sk->sk_state == TCP_CLOSE) { - release_sock(sk); - return -ENOENT; - } - if (sk->sk_state == TCP_LISTEN) { tcp_set_state(sk, TCP_CLOSE); inet_csk_listen_stop(sk); @@ -4744,12 +4738,15 @@ int tcp_abort(struct sock *sk, int err) local_bh_disable(); bh_lock_sock(sk); - if (tcp_need_reset(sk->sk_state)) - tcp_send_active_reset(sk, GFP_ATOMIC); - tcp_done_with_error(sk, err); + if (!sock_flag(sk, SOCK_DEAD)) { + if (tcp_need_reset(sk->sk_state)) + tcp_send_active_reset(sk, GFP_ATOMIC); + tcp_done_with_error(sk, err); + } bh_unlock_sock(sk); local_bh_enable(); + tcp_write_queue_purge(sk); release_sock(sk); return 0; }