]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
llc: fix SAP refcount leak in llc_ui_autobind()
authorShuangpeng Bai <shuangpeng.kernel@gmail.com>
Tue, 30 Jun 2026 19:48:56 +0000 (15:48 -0400)
committerPaolo Abeni <pabeni@redhat.com>
Sun, 5 Jul 2026 07:05:14 +0000 (09:05 +0200)
llc_ui_autobind() opens a SAP after choosing a dynamic LSAP.
llc_sap_open() returns a reference owned by the caller, and
llc_sap_add_socket() takes a second reference for the socket's
membership in the SAP hash tables.

llc_ui_bind() drops the caller's reference after adding the socket,
but llc_ui_autobind() keeps it. When the socket is closed,
llc_sap_remove_socket() releases only the socket reference, leaving
the SAP on llc_sap_list with sk_count == 0.

This is user-visible because repeated autobind and close cycles can consume
all dynamic SAP values and make later autobinds fail with -EUSERS.

Drop the caller's reference after a successful autobind, matching
llc_ui_bind()'s ownership model.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Signed-off-by: Shuangpeng Bai <shuangpeng.kernel@gmail.com>
Link: https://patch.msgid.link/20260630194856.1036497-1-shuangpeng.kernel@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/llc/af_llc.c

index 8ed1be1ecccc5927eb9d76446999b4c63cff238d..b0447c33dbf096b40d0a79fee4bf34f9e8b44e15 100644 (file)
@@ -312,6 +312,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
        /* assign new connection to its SAP */
        llc_sap_add_socket(sap, sk);
        sock_reset_flag(sk, SOCK_ZAPPED);
+       llc_sap_put(sap);
        rc = 0;
 out:
        dev_put(dev);