IT SBIT Services
Schneeberger
DEEN
CVE tracker

Linux kernel CIFS/SMB client: Out-of-bounds write in SetEA request handling

CVE-2026-99109High 7.8

← All vulnerabilities

Summary

The Linux kernel CIFS/SMB client writes extended attribute values into an SMB1 request buffer without checking that they fit. A local user with an account on a system with a mounted SMB1 share can trigger an out-of-bounds write via setxattr(2) with a large value. The effect is kernel memory corruption, most likely a crash, and privilege escalation is not described in the sources.

Affected

  • Linux kernel, CIFS/SMB client (fs/smb/client), SMB1 path CIFSSMBSetEA()
  • Introduced in 2.6.12 according to OSV and the CVE record; the exact affected versions are not yet confirmed by a primary source
  • Fixed upstream by commits 4aa2c106aef4bf3dfd97c30842db0767b26e8428 and 9efbd764ab80fa86d2258550877a74d78a25e855

Fixed in

  • Fixed upstream in commits 4aa2c106aef4bf3dfd97c30842db0767b26e8428 and 9efbd764ab80fa86d2258550877a74d78a25e855
  • Fixed kernel release versions per distribution: Unknown.

Workaround

  • Mount SMB shares with SMB 2.x or 3.x (for example vers=3.0 or higher) instead of SMB1, which avoids the affected code path for those mounts (inference, not from a vendor)
  • Disable SMB1 support in the kernel where possible (CONFIG_CIFS_ALLOW_INSECURE_LEGACY); verify this for your kernel version
  • Limit which local users can mount legacy SMB shares on multi-user Linux hosts

Exploitation

  • No evidence of exploitation in the wild was found.
  • No public proof of concept was found.
  • EPSS: 0.16 % (percentile 5).

Our recommendation

  • Identify Linux systems that mount SMB1 shares, for example old NAS devices or appliances.
  • Switch those mounts to SMB 2.x/3.x where possible and disable SMB1 in the kernel.
  • Install the kernel update that includes the upstream fix as part of the normal update cycle, and check your distribution's advisories for the fixed version.
  • Escalate priority only on multi-user Linux hosts that mount SMB1 shares.

Public exploits

PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.

Research sources

Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 22:05.

Original description (NVD)

In the Linux kernel, the following vulnerability has been resolved: smb: client: reject SetEA requests that do not fit the request buffer CIFSSMBSetEA() copies the caller's extended attribute value into the SMB request buffer without checking that it fits. The requirement is stated in the source but was never implemented: /*BB add length check to see if it would fit in negotiated SMB buffer size BB */ /* if (ea_value_len > buffer_size - 512 (enough for header)) */ if (ea_value_len) memcpy(parm_data->list.name + name_len + 1, ea_value, ea_value_len); The only bound applied on the way in is in cifs_xattr_set(): #define MAX_EA_VALUE_SIZE CIFSMaxBufSize ... if (size > MAX_EA_VALUE_SIZE) CIFSMaxBufSize is the full payload capacity of the buffer, so a value of exactly that size leaves no room for the SMB header, the TRANS2 parameter block, the fealist header and the EA name that are written ahead of it in the same object. SendReceive() already enforces the correct limit on this very length: if (in_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) but it is called after the copy has taken place. An unprivileged setxattr(2) on an SMB1 mount with a 250-byte name and a 16384-byte value writes 16384 bytes starting 345 bytes into a 16588-byte cifs_request object, ending 141 bytes past it: BUG: KASAN: slab-out-of-bounds in CIFSSMBSetEA+0xabc/0xde0 Write of size 16384 at addr ffff888003aa0159 by task init/68 __asan_memcpy+0x3c/0x60 CIFSSMBSetEA+0xabc/0xde0 cifs_xattr_set+0xd3a/0xff0 __vfs_setxattr+0x13e/0x1a0 The buggy address is located 345 bytes inside of allocated 16588-byte region Apply SendReceive()'s limit to the assembled request before the copy rather than after it, and widen the byte counters so the sum cannot wrap before it is tested. byte_count is also tested against U16_MAX, because it is stored in the 16-bit pSMB->ByteCount. That becomes reachable when CIFSMaxBufSize is raised at module load, where it may be set as high as 1024*127: with a 5-byte EA name and a 65521-byte value, count is exactly U16_MAX while byte_count is 65556, and cpu_to_le16() would truncate it to 20 and transmit a frame whose ByteCount does not match its length. Testing byte_count covers count as well, since byte_count is the larger of the two and count's only 16-bit consumer is written after this point. check_add_overflow() is evaluated first so that total_len is assigned before it is reported.

NVD references (2)

Sources

The tracker combines official, freely usable data sources – updated continuously:

This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.

Affected? We can help.

We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.