Re: [PATCH] ksmbd: validate compound request size before reading StructureSize2
From: Namjae Jeon
Date: Mon Jul 13 2026 - 20:02:19 EST
On Tue, Jul 14, 2026 at 6:55 AM Xiang Mei (Microsoft) <xmei5@xxxxxxx> wrote:
>
> When ksmbd validates a compound (chained) SMB2 request,
> ksmbd_smb2_check_message() reads pdu->StructureSize2 without first
> checking that the compound element is large enough to contain it.
> StructureSize2 is a 2-byte field at offset 64
> (__SMB2_HEADER_STRUCTURE_SIZE) from the start of each element.
>
> The compound-walking logic only guarantees that a full 64-byte SMB2
> header is present for the trailing element: when NextCommand is 0, len is
> reduced to the number of bytes remaining after next_smb2_rcv_hdr_off. A
> remote client can craft a compound request whose last element has exactly
> 64 bytes, so the 2-byte StructureSize2 read at offset 64 extends one byte
> past the receive buffer, producing a slab-out-of-bounds read.
>
> BUG: KASAN: slab-out-of-bounds in ksmbd_smb2_check_message (fs/smb/server/smb2misc.c:402)
> Read of size 2 at addr ffff888012ae31ac by task kworker/0:1/14
> The buggy address is located 172 bytes inside of allocated 173-byte region
> Workqueue: ksmbd-io handle_ksmbd_work
> Call Trace:
> ...
> kasan_report (mm/kasan/report.c:595)
> ksmbd_smb2_check_message (fs/smb/server/smb2misc.c:402)
> handle_ksmbd_work (fs/smb/server/server.c:119)
> process_one_work (kernel/workqueue.c:3314)
> worker_thread (kernel/workqueue.c:3397)
> kthread (kernel/kthread.c:436)
> ret_from_fork (arch/x86/kernel/process.c:158)
> ret_from_fork_asm (arch/x86/entry/entry_64.S:245)
>
> Reject any compound element that is too small to hold StructureSize2
> before dereferencing it.
>
> Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
> Reported-by: AutonomousCodeSecurity@xxxxxxxxxxxxx
> Signed-off-by: Xiang Mei (Microsoft) <xmei5@xxxxxxx>
Applied it to #ksmbd-for-next-next.
Thanks!