ksmbd: fix leak of transform buffer on encrypt_resp() failure
Subsystems (2)
PATCH 1/1 ksmbd: fix leak of transform buffer on encrypt_resp() failure
When encrypt_resp() fails at the send path, we only set STATUS_DATA_ERROR but leave the transform buffer allocated (work->tr_buf in this tree). Repeating this path leaks kernel memory and can lead to OOM (DoS) when encryption is required.
Reproduced on: Linux v6.18-rc2 (self-built test kernel)
Fix by freeing the transform buffer and forcing plaintext error reply.
Reported-by Qianchang Zhao <[email protected]>
Reported-by Zhitong Liu <[email protected]>
Signed-off-by Qianchang Zhao <[email protected]>
--- fs/smb/server/server.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
fs/smb/server/server.c +7 -1
@@ -244,8 +244,14 @@ static void __handle_ksmbd_work(struct ksmbd_work *work,if (work->sess && work->sess->enc && work->encrypted && conn->ops->encrypt_resp) { rc = conn->ops->encrypt_resp (work); -if (rc <0 ) +if (rc <0 ) { conn->ops->set_rsp_status (work,STATUS_DATA_ERROR ); + work->encrypted = false; +if (work->tr_buf) { +kvfree (work->tr_buf); + work->tr_buf =NULL ; + } + } }if (work->sess)ksmbd_user_session_put (work->sess);
Signature · 1 line
2.34.1