ksmbd: fix slab-use-after-free in smb3_preauth_hash_rsp
PATCH 1/1 ksmbd: fix slab-use-after-free in smb3_preauth_hash_rsp
From: Namjae Jeon <[email protected]>
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().
--- fs/ksmbd/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/ksmbd/server.c +2 -2
@@ -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);
Signature · 1 line
2.34.1
Sasha Levin
maintainer[ Sasha's backport helper bot ]
Hi,
The upstream commit SHA1 provided is correct: b8fc56fbca7482c1e5c0e3351c6ae78982e25ada
WARNING: Author mismatch between patch and upstream commit:
Backport author: <[email protected]>
Commit author: Namjae Jeon <[email protected]>
Status in newer kernel trees:
6.12.y | Present (exact SHA1)
6.11.y | Present (different SHA1: 1b6ad475d4ed) 6.6.y | Present (different SHA1: c6cdc08c25a8) 6.1.y | Present (different SHA1: f7557bbca40d) 5.15.y | Not found
Note: The patch differs from the upstream commit:
---
tmp/tmp.cpyd1kXGy5 renamed from - +12 -5
@@ -1,3 +1,5 @@ +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().
@@ -6,14 +8,16 @@ Tested-by: Norbert Szetei <[email protected]> Signed-off-by: Namjae Jeon <[email protected]> Signed-off-by: Steve French <[email protected]> +Signed-off-by: Greg Kroah-Hartman <[email protected]> +Signed-off-by: Mingli Yu <[email protected]> --- - fs/smb/server/server.c | 4 ++-- + fs/ksmbd/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/fs/smb/server/server.c b/fs/smb/server/server.c -index 9670c97f14b3e..e7f14f8df943e 100644 ---- a/fs/smb/server/server.c -+++ b/fs/smb/server/server.c +diff --git a/fs/ksmbd/server.c b/fs/ksmbd/server.c +index 09ebcf39d5bc..da5b9678ad05 100644 +--- a/fs/ksmbd/server.c ++++ b/fs/ksmbd/server.c @@ -238,11 +238,11 @@ static void __handle_ksmbd_work(struct ksmbd_work *work, } while (is_chained == true);
@@ -28,3 +32,6 @@ if (work->sess && work->sess->enc && work->encrypted && conn->ops->encrypt_resp) { rc = conn->ops->encrypt_resp(work); +-- +2.34.1 +
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.15.y | Success | Success |