Re: [PATCH] ksmbd: validate compound request size before reading StructureSize2
Namjae Jeon <[email protected]>
| Newsgroups | org.kernel.vger.linux-cifs,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAKYAXd_jJHQwiu2yjs1hxk-r0k3A+YMq5Ax8oN1qdzWfoveycA@mail.gmail.com> |
On Tue, Jul 14, 2026 at 6:55 AM Xiang Mei (Microsoft) <[email protected]> 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: [email protected] > Signed-off-by: Xiang Mei (Microsoft) <[email protected]> Applied it to #ksmbd-for-next-next. Thanks!