]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ksmbd: check return value of xa_store() in krb5_authenticate
authorNamjae Jeon <linkinjeon@kernel.org>
Mon, 21 Jul 2025 05:29:43 +0000 (14:29 +0900)
committerSteve French <stfrench@microsoft.com>
Fri, 25 Jul 2025 03:55:29 +0000 (22:55 -0500)
xa_store() may fail so check its return value and return error code if
error occurred.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/smb2pdu.c

index 0caf30fb1df195d43706a7087671a5622853ed3f..b46fbc8087e0c0ef2a32fa8547423c89ae598b75 100644 (file)
@@ -1594,7 +1594,7 @@ static int krb5_authenticate(struct ksmbd_work *work,
        struct ksmbd_conn *conn = work->conn;
        struct ksmbd_session *sess = work->sess;
        char *in_blob, *out_blob;
-       struct channel *chann = NULL;
+       struct channel *chann = NULL, *old;
        u64 prev_sess_id;
        int in_len, out_len;
        int retval;
@@ -1660,7 +1660,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);
+                       }
                }
        }