CVE-2026-89634
massInteger (ALIGN) overflow in Linux kernel SMB client symlink parsing enables OOB read and hang
CVE-2026-89634 is an integer-overflow flaw in the Linux kernel's SMB/CIFS client, in the symlink_data() error-context parsing loop. When a client mounts an SMB share and parses a symlink reparse point, a malicious or compromised SMB server can supply an ErrorDataLength near UINT32_MAX (e.g. 0xFFFFFFF9); ALIGN() then wraps to 0, defeating the bounds check so the loop advances zero bytes and reads stale/out-of-bounds buffer data. An attacker controlling an SMB server that a victim mounts gains disclosure of kernel memory (CVSS confidentiality: high) and can hang or crash the client (availability: high) with no privileges or user interaction required. The bug also undermines the earlier fix in commit 7d9a7f1f96cd, so kernels carrying that incomplete patch remain vulnerable. There is no public PoC, it is not in CISA KEV, and no exploitation is known to date.
What to do: Apply a kernel update containing the fix (verify your distro's kernel includes the corrected bounds check in symlink_data()) and reboot to load it. Until patched, restrict or avoid mounting SMB shares from untrusted or external servers, review automount/NAS configurations that connect to semi-trusted shares, and monitor for hung cifs mount processes or unexpected client crashes as indicators.
| Linux kernel (CIFS/SMB 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 ALIGN() overflow in symlink_data() error context loop The check added by commit 7d9a7f1f96cd ("smb/client: fix possible infinite loop and oob read in symlink_data()") compared the post-ALIGN length against the remaining buffer, but ALIGN() itself can overflow: for ErrorDataLength near UINT32_MAX (e.g. 0xFFFFFFF9), ALIGN(x, 8) wraps to 0, so the subsequent bounds check passes, and the loop advances by zero bytes leaving 'p' pointing into stale data. Fix by checking the raw ErrorDataLength against the remaining space before applying ALIGN(), then checking again after. Since raw_len is bounded by the buffer, raw_len + 7 cannot overflow, so the second check is an exact post-alignment bounds guard.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
In the news0 stories
No ingested article mentions this CVE yet.