Skip to content

Commit e86e913

Browse files
SeanHeelanSteve French
authored andcommitted
ksmbd: fix use-after-free in kerberos authentication
Setting sess->user = NULL was introduced to fix the dangling pointer created by ksmbd_free_user. However, it is possible another thread could be operating on the session and make use of sess->user after it has been passed to ksmbd_free_user but before sess->user is set to NULL. 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>
1 parent a1f46c9 commit e86e913

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

fs/smb/server/auth.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,19 @@ int ksmbd_krb5_authenticate(struct ksmbd_session *sess, char *in_blob,
550550
retval = -ENOMEM;
551551
goto out;
552552
}
553-
sess->user = user;
553+
554+
if (!sess->user) {
555+
/* First successful authentication */
556+
sess->user = user;
557+
} else {
558+
if (!ksmbd_compare_user(sess->user, user)) {
559+
ksmbd_debug(AUTH, "different user tried to reuse session\n");
560+
retval = -EPERM;
561+
ksmbd_free_user(user);
562+
goto out;
563+
}
564+
ksmbd_free_user(user);
565+
}
554566

555567
memcpy(sess->sess_key, resp->payload, resp->session_key_len);
556568
memcpy(out_blob, resp->payload + resp->session_key_len,

fs/smb/server/smb2pdu.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,11 +1607,6 @@ static int krb5_authenticate(struct ksmbd_work *work,
16071607
if (prev_sess_id && prev_sess_id != sess->id)
16081608
destroy_previous_session(conn, sess->user, prev_sess_id);
16091609

1610-
if (sess->state == SMB2_SESSION_VALID) {
1611-
ksmbd_free_user(sess->user);
1612-
sess->user = NULL;
1613-
}
1614-
16151610
retval = ksmbd_krb5_authenticate(sess, in_blob, in_len,
16161611
out_blob, &out_len);
16171612
if (retval) {

0 commit comments

Comments
 (0)