]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ksmbd: fix slab-use-after-free in smb3_preauth_hash_rsp
authorNamjae Jeon <linkinjeon@kernel.org>
Mon, 4 Nov 2024 04:40:41 +0000 (13:40 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 18:51:11 +0000 (19:51 +0100)
commit b8fc56fbca7482c1e5c0e3351c6ae78982e25ada upstream.

ksmbd_user_session_put should be called under smb3_preauth_hash_rsp().
It will avoid freeing session before calling smb3_preauth_hash_rsp().

Cc: stable@vger.kernel.org # v5.15+
Reported-by: Norbert Szetei <norbert@doyensec.com>
Tested-by: Norbert Szetei <norbert@doyensec.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ksmbd/server.c

index 09ebcf39d5bcb7c3fed5e7e311eff99e7016a656..da5b9678ad05a01f21b4f3e70f3742082220900f 100644 (file)
@@ -238,11 +238,11 @@ static void __handle_ksmbd_work(struct ksmbd_work *work,
        } while (is_chained == true);
 
 send:
-       if (work->sess)
-               ksmbd_user_session_put(work->sess);
        if (work->tcon)
                ksmbd_tree_connect_put(work->tcon);
        smb3_preauth_hash_rsp(work);
+       if (work->sess)
+               ksmbd_user_session_put(work->sess);
        if (work->sess && work->sess->enc && work->encrypted &&
            conn->ops->encrypt_resp) {
                rc = conn->ops->encrypt_resp(work);