ksmbd: enable TCP keepalive for accepted connections

A client that disappears without sending a FIN or RST can leave its
ksmbd connection in ESTABLISHED indefinitely. ksmbd sets a socket
receive timeout, but the connection receive loop retries timeout errors
without a limit, so the connection remains in conn_list and consumes the
per-IP connection quota.

Enable SO_KEEPALIVE on accepted TCP sockets so the TCP stack can detect a
silent peer failure. The keepalive idle time, interval, and probe count
remain controlled by the existing TCP sysctl settings.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
Namjae Jeon 2026-08-19 10:01:11 +09:00
parent 7de5cf9bcf
commit 56549c18a4

View File

@ -292,6 +292,12 @@ static int ksmbd_kthread_fn(void *p)
ksmbd_debug(CONN, "connect success: accepted new connection\n");
client_sk->sk->sk_rcvtimeo = KSMBD_TCP_RECV_TIMEOUT;
client_sk->sk->sk_sndtimeo = KSMBD_TCP_SEND_TIMEOUT;
/*
* Detect peers that disappear without sending a FIN or RST.
* Otherwise the connection handler can retry receive timeouts
* indefinitely and keep the connection in conn_list.
*/
sock_set_keepalive(client_sk->sk);
ksmbd_tcp_new_connection(client_sk);
}