In the Linux kernel, the following vulnerability has been resolved:
ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl()
smb_inherit_dacl() trusts the on-disk num_aces value from the parent directory's DACL xattr and uses it to size a heap allocation:
aces_base = kmalloc(sizeof(struct smb_ace) * num_aces * 2, ...);
num_aces is a u16 read from le16_to_cpu(parent_pdacl->num_aces) without checking that it is consistent with the declared pdacl_size. An authenticated client whose parent directory's security.NTACL is tampered (e.g. via offline xattr corruption or a concurrent path that bypasses parse_dacl()) can present num_aces = 65535 with minimal actual ACE data. This causes a ~8 MB allocation (not kzalloc, so uninitialized) that the subsequent loop only partially populates, and may also overflow the three-way size_t multiply on 32-bit kernels.
Additionally, the ACE walk loop uses the weaker offsetof(struct smb_ace, access_req) minimum size check rather than the minimum valid on-wire ACE size, and does not reject ACEs whose declared size is below the minimum.
Reproduced on UML + KASAN + LOCKDEP against the real ksmbd code path. A legitimate mount.cifs client creates a parent directory over SMB (ksmbd writes a valid security.NTACL xattr), then the NTACL blob on the backing filesystem is rewritten to set num_aces = 0xFFFF while keeping the posix_acl_hash bytes intact so ksmbd_vfs_get_sd_xattr()'s hash check still passes. A subsequent SMB2 CREATE of a child under that parent drives smb2_open() into smb_inherit_dacl() (share has "vfs objects = acl_xattr" set), which fails the page allocator:
WARNING: mm/page_alloc.c:5226 at __alloc_frozen_pages_noprof+0x46c/0x9c0 Workqueue: ksmbd-io handle_ksmbd_work __alloc_frozen_pages_noprof+0x46c/0x9c0 ___kmalloc_large_node+0x68/0x130 __kmalloc_large_node_noprof+0x24/0x70 __kmalloc_noprof+0x4c9/0x690 smb_inherit_dacl+0x394/0x2430 smb2_open+0x595d/0xabe0 handle_ksmbd_work+0x3d3/0x1140
With the patch applied the added guard rejects the tampered value with -EINVAL before any large allocation runs, smb2_open() falls back to smb2_create_sd_buffer(), and the child is created with a default SD. No warning, no splat.
Fix by:
1. Validating num_aces against pdacl_size using the same formula applied in parse_dacl().
2. Replacing the raw kmalloc(sizeof * num_aces * 2) with kmalloc_array(num_aces * 2, sizeof(...)) for overflow-safe allocation.
3. Tightening the per-ACE loop guard to require the minimum valid ACE size (offsetof(smb_ace, sid) + CIFS_SID_BASE_SIZE) and rejecting under-sized ACEs, matching the hardening in smb_check_perm_dacl() and parse_dacl().
v1 -> v2: - Replace the synthetic test-module splat in the changelog with a real-path UML + KASAN reproduction driven through mount.cifs and SMB2 CREATE; Namjae flagged the kcifs3_test_inherit_dacl_old name in v1 since it does not exist in ksmbd. - Drop the commit-hash citation from the code comment per Namjae's review; keep the parse_dacl() pointer.
CVSS Details
- CVSS 3.1 Base Score: 8.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | Jul 23, 2026 | Jul 23, 2026 |
| Ubuntu | — | Upgrade linux-image-realtime-6.8.1Upgrade linux-image-nvidia-tegra-rtUpgrade linux-image-6.8.0-1030-nvidia-tegra-rtUpgrade linux-image-nvidia-tegra-rt-6.8Upgrade linux-image-laptop-23.10Upgrade linux-image-nvidia-6.8Upgrade linux-image-realtime-64k-7.0Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-oem-20.04Upgrade linux-image-oem-22.04Upgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-xilinx-6.8Upgrade linux-image-intel-iotgUpgrade linux-image-gcp-fips-6.8Upgrade linux-image-generic-64kUpgrade linux-image-gcp-64k-6.8Upgrade linux-image-7.0.0-1009-ibmUpgrade linux-image-6.8.0-2050-raspi-realtimeUpgrade linux-image-aws-64k-7.0Upgrade linux-image-gcp-64kUpgrade linux-image-aws-fipsUpgrade linux-image-oracle-6.8Upgrade linux-image-raspiUpgrade linux-image-oem-24.04Upgrade linux-image-realtime-64kUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-nvidia-tegra-6.8Upgrade linux-image-6.8.0-1061-ibmUpgrade linux-image-intel-iot-realtimeUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1064-gcp-64kUpgrade linux-image-virtual-6.8Upgrade linux-image-6.8.0-136-lowlatency-64kUpgrade linux-image-gcp-64k-7.0Upgrade linux-image-oracle-lts-24.04Upgrade linux-image-6.8.0-1059-nvidiaUpgrade linux-image-6.8.1-1056-realtimeUpgrade linux-image-7.0.0-1010-azureUpgrade linux-image-6.8.0-1064-gcpUpgrade linux-image-6.8.0-1061-aws-64kUpgrade linux-image-6.8.0-136-generic-64kUpgrade linux-image-raspi-realtime-7.0Upgrade linux-image-7.0.0-27-realtimeUpgrade linux-image-7.0.0-1013-nvidia-64kUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-azure-fde-6.8Upgrade linux-image-realtime-7.0Upgrade linux-image-gcp-6.8Upgrade linux-image-oem-22.04dUpgrade linux-image-oracleUpgrade linux-image-realtimeUpgrade linux-image-gkeUpgrade linux-image-generic-64k-7.0Upgrade linux-image-generic-lpaeUpgrade linux-image-7.0.0-1014-raspi-realtimeUpgrade linux-image-lowlatency-64k-6.8Upgrade linux-image-6.8.0-1062-azure-fdeUpgrade linux-image-ibm-7.0Upgrade linux-image-nvidia-tegraUpgrade linux-image-azure-6.8Upgrade linux-image-6.8.0-136-fipsUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-7.0.0-1007-gcpUpgrade linux-image-raspi-6.8Upgrade linux-image-azureUpgrade linux-image-aws-7.0Upgrade linux-image-7.0.0-28-genericUpgrade linux-image-gkeopUpgrade linux-image-7.0.0-28-generic-64kUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-7.0.0-27-realtime-64kUpgrade linux-image-gke-64k-6.8Upgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-fipsUpgrade linux-image-nvidiaUpgrade linux-image-7.0.0-27-genericUpgrade linux-image-oem-20.04bUpgrade linux-image-generic-64k-hwe-26.04Upgrade linux-image-genericUpgrade linux-image-lowlatency-6.8Upgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-oem-22.04cUpgrade linux-image-aws-64kUpgrade linux-image-6.8.0-1063-azure-fipsUpgrade linux-image-aws-lts-24.04Upgrade linux-image-6.8.0-1059-nvidia-lowlatencyUpgrade linux-image-7.0.0-1007-oracleUpgrade linux-image-7.0.0-1014-raspiUpgrade linux-image-6.8.0-1061-aws-fipsUpgrade linux-image-oracle-64kUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-7.0.0-1013-nvidiaUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-azure-fipsUpgrade linux-image-6.8.0-1061-awsUpgrade linux-image-6.8.0-1059-gke-64kUpgrade linux-image-oem-22.04aUpgrade linux-image-6.8.0-1058-oracle-64kUpgrade linux-image-6.8.0-1059-nvidia-lowlatency-64kUpgrade linux-image-fips-6.8Upgrade linux-image-nvidia-7.0Upgrade linux-image-gke-64kUpgrade linux-image-generic-7.0Upgrade linux-image-azure-fips-6.8Upgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-virtualUpgrade linux-image-raspi-realtime-6.8Upgrade linux-image-oem-22.04bUpgrade linux-image-oem-20.04cUpgrade linux-image-6.8.0-1033-xilinxUpgrade linux-image-xilinxUpgrade linux-image-virtual-7.0Upgrade linux-image-gkeop-6.8Upgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-7.0.0-1007-oracle-64kUpgrade linux-image-realtime-64k-hwe-26.04Upgrade linux-image-oem-24.04bUpgrade linux-image-6.8.0-1064-gcp-fipsUpgrade linux-image-6.8.0-1063-azureUpgrade linux-image-6.8.0-1046-gkeopUpgrade linux-image-oracle-7.0Upgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-oracle-64k-6.8Upgrade linux-image-ibm-classicUpgrade linux-image-generic-6.8Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-awsUpgrade linux-image-7.0.0-1008-awsUpgrade linux-image-6.8.0-136-lowlatencyUpgrade linux-image-6.8.0-136-genericUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-realtime-hwe-22.04Upgrade linux-image-raspi-realtimeUpgrade linux-image-gcpUpgrade linux-image-7.0.0-1009-azure-fdeUpgrade linux-image-6.8.0-1059-nvidia-64kUpgrade linux-image-6.8.0-1058-oracleUpgrade linux-image-generic-hwe-26.04Upgrade linux-image-aws-64k-6.8Upgrade linux-image-6.8.0-1030-nvidia-tegraUpgrade linux-image-7.0.0-1008-aws-64kUpgrade linux-image-oem-20.04dUpgrade linux-image-ibm-6.8Upgrade linux-image-azure-7.0Upgrade linux-image-6.8.0-1059-gkeUpgrade linux-image-oem-24.04cUpgrade linux-image-nvidia-64k-7.0Upgrade linux-image-generic-hwe-24.04Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-oracle-64k-7.0Upgrade linux-image-oem-24.04aUpgrade linux-image-ibmUpgrade linux-image-gke-6.8Upgrade linux-image-aws-6.8Upgrade linux-image-6.8.0-1061-raspiUpgrade linux-image-virtual-hwe-26.04Upgrade linux-image-azure-lts-24.04Upgrade linux-image-nvidia-64kUpgrade linux-image-gcp-fipsUpgrade linux-image-raspi-7.0Upgrade linux-image-gcp-7.0Upgrade linux-image-generic-64k-6.8Upgrade linux-image-realtime-hwe-26.04Upgrade linux-image-lowlatencyUpgrade linux-image-azure-fde-7.0Upgrade linux-image-oem-24.04dUpgrade linux-image-7.0.0-27-generic-64kUpgrade linux-image-kvmUpgrade linux-image-7.0.0-1007-gcp-64kUpgrade linux-image-azure-fdeUpgrade linux-image-aws-fips-6.8 | Jul 1, 2026 | May 1, 2026 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jul 10, 2026 | May 1, 2026 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub