CVE-2026-89632
massOut-of-bounds read in Linux kernel SMB client reparse point parsing
The Linux kernel's SMB/CIFS client code contains a use-before-check flaw in reparse_buf_ptr(): it reads the 2-byte ReparseDataLength field at offset 4 of a reparse point buffer before verifying that the response is even large enough to contain the 8-byte fixed header. A malicious or compromised SMB server can return a deliberately truncated reparse point response (for example when the client follows a symlink or other reparse tag on the share) and cause the kernel to read past the end of the allocated buffer. The result is primarily denial of service via a kernel fault or panic, with possible limited disclosure of adjacent kernel memory, consistent with the CVSS 3.1 score of 8.2 (AV:N/AC:L/PR:N/UI:N, A:H, C:L). Any Linux system whose kernel includes the affected fs/smb/client code and which mounts SMB shares — especially from untrusted servers — is potentially affected; the advisory does not specify fixed version numbers, so check your distribution's kernel packages. No public proof of concept is known and the issue is not on CISA's KEV, so exploitation is not known to be occurring in the wild.
What to do: Update to a kernel containing the reparse_buf_ptr() fix as soon as your distribution ships it in stable or LTS kernel packages. In the interim, avoid mounting SMB/CIFS shares from untrusted or unauthenticated servers and disable automounting of network shares. Monitor kernel logs for cifs/smb-client oopses or panics on machines that mount external shares, which would indicate malformed reparse responses.
| Linux Foundation Linux kernel (SMB/CIFS client, fs/smb/client) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix use-before-check of ReparseDataLength in reparse_buf_ptr() reparse_buf_ptr() reads buf->ReparseDataLength before checking that count covers the full fixed header: buf = (struct reparse_data_buffer *)((u8 *)io + off); len = sizeof(*buf); /* 8 bytes */ rdlen = le16_to_cpu(buf->ReparseDataLength); /* offset 4, 2 bytes */ if (count = sizeof(*buf) before reading ReparseDataLength, then verify count covers the data region.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H
In the news0 stories
No ingested article mentions this CVE yet.