CVE-2026-98170
NoneCVSS
—
EPSS
0.2%
Published
Oct 6, 2026
CISA due date
—
Cloudanix analysis
A flaw in how Linux reads file attributes from Windows file servers can let a bad server cause the client computer to read memory it should not, potentially leading to crashes or information leaks.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- OS kernel
- Class
- Buffer Overflow
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Insufficient bounds check in move_smb2_ea_to_cifs() allows the while (src_size > 0) loop to dereference ea_name_length and ea_value_length fields of an smb2_ea_info structure when remaining src_size is smaller than the structure size, resulting in an out-of-bounds read.
Why it matters to the business
Linux SMB clients may experience kernel memory disclosure or crashes when connecting to a server that returns a malformed extended attribute list, potentially disrupting file access or exposing sensitive kernel memory.
How an attack unfolds
An attacker hosts a malicious SMB server that replies to SMB2 QUERY_INFO or similar requests with an EA list whose total size or next_entry_offset values are crafted to be smaller than sizeof(smb2_ea_info). When the client invokes move_smb2_ea_to_cifs() on this response, the loop condition permits reads past the supplied buffer, triggering the out-of-bounds access.
How to fix it
Apply the upstream kernel patch that adds src_size >= sizeof(*src) guard before reading fields and validates next_entry_offset against both structure size and remaining buffer length. Rebuild and deploy the updated kernel; for distributions, install the corresponding security update once available.
How to confirm the fix worked
Confirm the patched kernel source contains the size check before the while loop and the next_entry_offset sanity tests; test by replaying a deliberately malformed EA response and verifying -EIO is returned instead of previous error codes or a crash.
Typical attack path
- Attacker configures SMB server to return a malformed EA list with insufficient length or invalid next_entry_offset
- Victim Linux client mounts the share or issues getxattr/listxattr operations
- Kernel processes the server response and calls move_smb2_ea_to_cifs()
- Loop iterates without adequate size validation, performing out-of-bounds reads of EA structure fields
- Kernel returns -EIO to userspace or experiences memory corruption effects
How to detect it
Examine kernel logs for oops or panic messages referencing move_smb2_ea_to_cifs or smb2_ea_info; audit SMB client activity logs for repeated connections to untrusted servers followed by -EIO errors on xattr operations.
What your security team should do
- Prioritize kernel updates for all Linux systems that mount SMB shares
- Monitor vendor security advisories for the specific distribution kernel package containing this fix
- Consider network segmentation or SMB server allow-listing until patches are deployed
- Review SMB client configurations to restrict unnecessary extended attribute usage where feasible
The record
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix OOB struct field reads in move_smb2_ea_to_cifs() In move_smb2_ea_to_cifs(), the while (src_size > 0) loop condition is insufficient. It allows iteration to continue even if the remaining src_size is too small to contain a complete smb2_ea_info structure. Consequently, reads of ea_name_length and ea_value_length can occur out-of-bounds. Fix this by ensuring src_size >= sizeof(*src) before attempting to read any structure fields. Additionally, reject any next_entry_offset that is smaller than sizeof(*src) or that would advance the pointer beyond the available buffer. Note that for calls where the server returns a malformed EA list, the error returned to userspace changes from -ENODATA (getxattr) or -ERANGE (listxattr) to -EIO. This correctly signals a server protocol error rather than misleadingly indicating "attribute not present" or "output buffer too small".
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|