CRITICAL
smb SymlinkData Overflow
CVE-2026-89634
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
KernelScan AI8.1HIGH
01Description
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.
02KernelScan AI Analysis
Risk summary
A malicious or man-in-the-middle SMB server can send a crafted symlink error response with an error data length near UINT32_MAX, causing an integer overflow in the client's alignment macro. This bypasses bounds checks and results in an infinite loop or stale-data read in the client kernel. Any system that mounts SMB shares from untrusted or compromised servers is at risk.
Vulnerability analysis
When the SMB client processes a symlink error response from a server, it rounds up a data-length value supplied by the server before checking whether that length still fits inside the remaining message buffer. If the server provides a value near the maximum for a 32-bit integer, the rounding arithmetic wraps around to zero, so the bounds check succeeds and the parser gets stuck: it either stops moving forward and loops forever on the same data, or steps forward by only a fixed header size and later reads past the end of the buffer. The fix validates the original length against the remaining space before the rounding step, then checks the rounded length afterward, so a wrapped value can no longer pass both guards. Any client that has mounted a malicious or man-in-the-middle SMB share can be affected; the attacker does not need an account or privileges on the victim system.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.0 | 6.0.16 | 6.1 | 2b4a25baa0b9 |
| 6.1 | — | 6.1.188 | b89d678f9eaf |
| 6.12 | — | 6.12.109 | 1f824f61d1df |
| 6.18 | — | 6.18.50 | 62a3025983c8 |
| 6.6 | — | 6.6.157 | 657372ba6ea5 |
| 7.2 | — | 7.2.4 | 62656b024efc |
| mainline | — | 7.3 | — |
| cip/6.1 | — | 6.1.189-cip61 | 2b4a25baa0b9 |
| cip/6.1-rt | — | 6.1.189-cip61-rt32 | 2b4a25baa0b9 |
| cip/6.12 | — | 6.12.111-cip32 | 657372ba6ea5 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.111-cip32 |
| cip/6.1 | Fixed in 6.1.189-cip61 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |