]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ksmbd: Fix dangling pointer in krb_authenticate
authorSean Heelan <seanheelan@gmail.com>
Mon, 7 Apr 2025 11:26:50 +0000 (11:26 +0000)
committerSteve French <stfrench@microsoft.com>
Tue, 15 Apr 2025 03:21:26 +0000 (22:21 -0500)
krb_authenticate frees sess->user and does not set the pointer
to NULL. It calls ksmbd_krb5_authenticate to reinitialise
sess->user but that function may return without doing so. If
that happens then smb2_sess_setup, which calls krb_authenticate,
will be accessing free'd memory when it later uses sess->user.

Cc: stable@vger.kernel.org
Signed-off-by: Sean Heelan <seanheelan@gmail.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/smb2pdu.c

index d24d95d15d876b325d25d7ca250503e889c3867c..57839f9708bb6c973e48219921ffaa59414d7624 100644 (file)
@@ -1602,8 +1602,10 @@ static int krb5_authenticate(struct ksmbd_work *work,
        if (prev_sess_id && prev_sess_id != sess->id)
                destroy_previous_session(conn, sess->user, prev_sess_id);
 
-       if (sess->state == SMB2_SESSION_VALID)
+       if (sess->state == SMB2_SESSION_VALID) {
                ksmbd_free_user(sess->user);
+               sess->user = NULL;
+       }
 
        retval = ksmbd_krb5_authenticate(sess, in_blob, in_len,
                                         out_blob, &out_len);