CVE-2026-31614: Linux kernel · smb: client: fix off-by-8 bounds check in check_wsl_eas()
Affects Linux kernelSource CVE Database V5
Not known to be exploited · fixed in bfbc74df8bbe095b3ed68f6d4487b368af087890 : update Linux kernel when convenient.
Data as of 6 Nov 2026, 15:49 UTC
Rated by Threat Radar · No CVSS score from NVD or the CNA
Thin evidence
One scorer or none- CISA SSVC
- Exploitation
- No evidence of active exploitation and no public proof of concept
- Automatable
- Attackers cannot reliably automate steps 1–4 of the kill chain
- Technical impact
- Limited control over the software or limited information exposure
CISA SSVC assessment, 2026-11-06.
- Patch
- Available – fixed in bfbc74df8bbe095b3ed68f6d4487b368af087890, ba3ad159aa61810bbe0acaf39578b1ebfb6f1a18, b2b76d09a64c538c57006180103fc1841e8cfa66 +4
Exploitation evidence
Disclosed: evidence found.
CVE published 24 Apr 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponized: no evidence on record.
No public exploit code indexed in Metasploit or Exploit-DB
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 6 Nov 2026.
What to do
Upgrade to a fixed release listed under Affected software.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| LinuxLinux | Affected
| Fixed in
|
| LinuxLinux | Affected
| Fixed in– |
Description
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix off-by-8 bounds check in check_wsl_eas() The bounds check uses (u8 *)ea + nlen + 1 + vlen as the end of the EA name and value, but ea_data sits at offset sizeof(struct smb2_file_full_ea_info) = 8 from ea, not at offset 0. The strncmp() later reads ea->ea_data[0..nlen-1] and the value bytes follow at ea_data[nlen+1..nlen+vlen], so the actual end is ea->ea_data + nlen + 1 + vlen. Isn't pointer math fun? The earlier check (u8 *)ea > end - sizeof(*ea) only guarantees the 8-byte header is in bounds, but since the last EA is placed within 8 bytes of the end of the response, the name and value bytes are read past the end of iov. Fix this mess all up by using ea->ea_data as the base for the bounds check. An "untrusted" server can use this to leak up to 8 bytes of kernel heap into the EA name comparison and influence which WSL xattr the data is interpreted as.
References
- git.kernel.org/stable/c/bfbc74df8bbe095b3ed68f6d4487b368af087890 (opens in a new tab)
- git.kernel.org/stable/c/5cc0574c84aa73946ade587c41e81757b8b01cb5 (opens in a new tab)
- git.kernel.org/stable/c/b2b76d09a64c538c57006180103fc1841e8cfa66 (opens in a new tab)
- git.kernel.org/stable/c/ba3ad159aa61810bbe0acaf39578b1ebfb6f1a18 (opens in a new tab)
- git.kernel.org/stable/c/a893f1757d9a4009e4a8d7ceb2312142fe29cea4 (opens in a new tab)
- git.kernel.org/stable/c/3d8b9d06bd3ac4c6846f5498800b0f5f8062e53b (opens in a new tab)