Messages in this thread Patch in this message | | | From | Leonard Crestez <> | Subject | [PATCH RFC] tcp: diag: Also support for FIN_WAIT1 sockets for tcp_abort() | Date | Sun, 3 Jul 2022 22:51:03 +0300 |
| |
Aborting tcp connections via ss -K doesn't work in TCP_FIN_WAIT1 state, this happens because the SOCK_DEAD flag is set. Fix by ignoring that flag for this special case.
Signed-off-by: Leonard Crestez <cdleonard@gmail.com>
--- net/ipv4/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
I tested that this fixes the problem but not certain about correctness.
Support for TCP_TIME_WAIT was added recently but it doesn't fix TCP_FIN_WAIT1.
See: https://lore.kernel.org/netdev/20220627121038.226500-1-edumazet@google.com/
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index d9dd998fdb76..215e7d3fed13 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4661,11 +4661,11 @@ int tcp_abort(struct sock *sk, int err) /* Don't race with BH socket closes such as inet_csk_listen_stop. */ local_bh_disable(); bh_lock_sock(sk); - if (!sock_flag(sk, SOCK_DEAD)) { + if (sk->sk_state == TCP_FIN_WAIT1 || !sock_flag(sk, SOCK_DEAD)) { sk->sk_err = err; /* This barrier is coupled with smp_rmb() in tcp_poll() */ smp_wmb(); sk_error_report(sk); if (tcp_need_reset(sk->sk_state)) -- 2.25.1
| |