]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ksmbd: fix Preauh_HashValue race condition
authorNamjae Jeon <linkinjeon@kernel.org>
Thu, 24 Jul 2025 23:13:31 +0000 (08:13 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 10:14:11 +0000 (12:14 +0200)
commit 44a3059c4c8cc635a1fb2afd692d0730ca1ba4b6 upstream.

If client send multiple session setup requests to ksmbd,
Preauh_HashValue race condition could happen.
There is no need to free sess->Preauh_HashValue at session setup phase.
It can be freed together with session at connection termination phase.

Cc: stable@vger.kernel.org
Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-27661
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/smb/server/smb2pdu.c

index b04c5f2a091a1fffb2d50e93315117f2714bfe27..495a9faa298bdf64728e1c1b03e787d56fdb42b1 100644 (file)
@@ -1845,8 +1845,6 @@ int smb2_sess_setup(struct ksmbd_work *work)
                                ksmbd_conn_set_good(conn);
                                sess->state = SMB2_SESSION_VALID;
                        }
-                       kfree(sess->Preauth_HashValue);
-                       sess->Preauth_HashValue = NULL;
                } else if (conn->preferred_auth_mech == KSMBD_AUTH_NTLMSSP) {
                        if (negblob->MessageType == NtLmNegotiate) {
                                rc = ntlm_negotiate(work, negblob, negblob_len, rsp);
@@ -1873,8 +1871,6 @@ int smb2_sess_setup(struct ksmbd_work *work)
                                                kfree(preauth_sess);
                                        }
                                }
-                               kfree(sess->Preauth_HashValue);
-                               sess->Preauth_HashValue = NULL;
                        } else {
                                pr_info_ratelimited("Unknown NTLMSSP message type : 0x%x\n",
                                                le32_to_cpu(negblob->MessageType));