]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
ksmbd: fix infinite loop caused by next_smb2_rcv_hdr_off reset in error paths
authorNamjae Jeon <linkinjeon@kernel.org>
Sat, 24 Jan 2026 01:55:46 +0000 (10:55 +0900)
committerSteve French <stfrench@microsoft.com>
Mon, 9 Feb 2026 02:24:11 +0000 (20:24 -0600)
commit010eb01ce23b34b50531448b0da391c7f05a72af
tree0adf0b95a2619650c55a94f6ce6ee7cf8975fe84
parent214220e7fa3aa8f7108dd8d1bf4ed6a84d3540ff
ksmbd: fix infinite loop caused by next_smb2_rcv_hdr_off reset in error paths

The problem occurs when a signed request fails smb2 signature verification
check. In __process_request(), if check_sign_req() returns an error,
set_smb2_rsp_status(work, STATUS_ACCESS_DENIED) is called.
set_smb2_rsp_status() set work->next_smb2_rcv_hdr_off as zero. By resetting
next_smb2_rcv_hdr_off to zero, the pointer to the next command in the chain
is lost. Consequently, is_chained_smb2_message() continues to point to
the same request header instead of advancing. If the header's NextCommand
field is non-zero, the function returns true, causing __handle_ksmbd_work()
to repeatedly process the same failed request in an infinite loop.
This results in the kernel log being flooded with "bad smb2 signature"
messages and high CPU usage.

This patch fixes the issue by changing the return value from
SERVER_HANDLER_CONTINUE to SERVER_HANDLER_ABORT. This ensures that
the processing loop terminates immediately rather than attempting to
continue from an invalidated offset.

Reported-by: tianshuo han <hantianshuo233@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/server.c