]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb: server: fix leak of active_num_conn in ksmbd_tcp_new_connection()
authorHenrique Carvalho <henrique.carvalho@suse.com>
Wed, 4 Feb 2026 23:06:43 +0000 (20:06 -0300)
committerSteve French <stfrench@microsoft.com>
Mon, 9 Feb 2026 02:25:16 +0000 (20:25 -0600)
On kthread_run() failure in ksmbd_tcp_new_connection(), the transport is
freed via free_transport(), which does not decrement active_num_conn,
leaking this counter.

Replace free_transport() with ksmbd_tcp_disconnect().

Fixes: 0d0d4680db22e ("ksmbd: add max connections parameter")
Cc: stable@vger.kernel.org
Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/transport_tcp.c

index 4bb07937d7efebb01b9871c9a3c7b4d84f59e5e7..2436dabada957aca3f2fcefed3a0a1b3cdec6a34 100644 (file)
@@ -40,6 +40,7 @@ static const struct ksmbd_transport_ops ksmbd_tcp_transport_ops;
 
 static void tcp_stop_kthread(struct task_struct *kthread);
 static struct interface *alloc_iface(char *ifname);
+static void ksmbd_tcp_disconnect(struct ksmbd_transport *t);
 
 #define KSMBD_TRANS(t) (&(t)->transport)
 #define TCP_TRANS(t)   ((struct tcp_transport *)container_of(t, \
@@ -202,7 +203,7 @@ static int ksmbd_tcp_new_connection(struct socket *client_sk)
        if (IS_ERR(handler)) {
                pr_err("cannot start conn thread\n");
                rc = PTR_ERR(handler);
-               free_transport(t);
+               ksmbd_tcp_disconnect(KSMBD_TRANS(t));
        }
        return rc;
 }