]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
smb: server: smb2pdu: check return value of xa_store()
authorSalah Triki <salah.triki@gmail.com>
Wed, 16 Apr 2025 19:26:25 +0000 (20:26 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:50 +0000 (11:13 +0200)
[ Upstream commit af5226abb40cae959f424f7ca614787a1c87ce48 ]

xa_store() may fail so check its return value and return error code if
error occurred.

Signed-off-by: Salah Triki <salah.triki@gmail.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/smb/server/smb2pdu.c

index c2603c398a46745e4388f9497f57fd8817ef9f49..f2a2be8467c66900fbaa215ba8b954193b8d93ee 100644 (file)
@@ -1450,7 +1450,7 @@ static int ntlm_authenticate(struct ksmbd_work *work,
 {
        struct ksmbd_conn *conn = work->conn;
        struct ksmbd_session *sess = work->sess;
-       struct channel *chann = NULL;
+       struct channel *chann = NULL, *old;
        struct ksmbd_user *user;
        u64 prev_id;
        int sz, rc;
@@ -1562,7 +1562,12 @@ binding_session:
                                return -ENOMEM;
 
                        chann->conn = conn;
-                       xa_store(&sess->ksmbd_chann_list, (long)conn, chann, KSMBD_DEFAULT_GFP);
+                       old = xa_store(&sess->ksmbd_chann_list, (long)conn, chann,
+                                       KSMBD_DEFAULT_GFP);
+                       if (xa_is_err(old)) {
+                               kfree(chann);
+                               return xa_err(old);
+                       }
                }
        }