CVE-2026-99272: smb: client: validate the data area in SMB2_read()
In the Linux kernel, the following vulnerability has been resolved:
smb: client: validate the data area in SMB2read()
SMB2read() copies le32tocpu(rsp->DataLength) bytes from (char )rsp + rsp->DataOffset without checking that the range lies within the response actually received. A READ response with DataOffset == 0 makes smb2getdataarealen() zero the data length, so smb2checkmessage() accepts a frame as short as the fixed response, while SMB2read() still uses the server-supplied DataLength, capped only by CIFSMAXMSGSIZE and the caller's length.
A malicious server can answer the synchronous read used by the mfsymlinks (or SFU) symlink parser with an 81-byte READ response carrying DataOffset 0 and DataLength 1067, making the client copy 1067 bytes from a 448-byte receive object (KASAN slab-out-of-bounds; up to 16 KiB in the general case).
Clamp a zero (or header-overlapping) DataOffset to readrspsize, as handlereaddata() does for the asynchronous path, and reject the response unless DataOffset + DataLength fits within rspiov.iovlen. The SMB1 helper was fixed the same way in 5be5bdda5863.
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
Validate the SMB2 read response data area before copying: clamp a zero or header-overlapping DataOffset to read_rsp_size, and reject the response unless DataOffset plus DataLength fits within rsp_iov.iov_len.