mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
ksmbd: find bound sessions during reauthentication
A session bound to an additional connection is stored in the session channel list, but it is not added to that connection's local session table. After the binding exchange completes, conn->binding is cleared. A later SESSION_SETUP reauthentication on the bound channel only searches the local session table. It fails to find the session and returns STATUS_USER_SESSION_DELETED instead of processing authentication and returning STATUS_LOGON_FAILURE for invalid credentials. If the local lookup fails, look up the session globally and accept it only when the current connection is registered in its channel list. This keeps unbound connections from using the session while allowing reauthentication on an established channel. This fixes smb2.session.bind_invalid_auth. Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
9e8ad620dd
commit
faf8578c77
@@ -2018,6 +2018,13 @@ int smb2_sess_setup(struct ksmbd_work *work)
|
||||
} else {
|
||||
sess = ksmbd_session_lookup(conn,
|
||||
le64_to_cpu(req->hdr.SessionId));
|
||||
if (!sess) {
|
||||
sess = ksmbd_session_lookup_slowpath(le64_to_cpu(req->hdr.SessionId));
|
||||
if (sess && !lookup_chann_list(sess, conn)) {
|
||||
ksmbd_user_session_put(sess);
|
||||
sess = NULL;
|
||||
}
|
||||
}
|
||||
if (!sess) {
|
||||
rc = -ENOENT;
|
||||
goto out_err;
|
||||
|
||||
Reference in New Issue
Block a user