Linux Kernel
CVE-2024-26786
HIGH
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Error path requires xa_alloc success AND alignment failure (AC:H); primary impact is kernel DoS (A:H); privilege escalation undemonstrated so C:L/I:L.
Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).
CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Lifecycle Timeline
7DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
iommufd: Fix iopt_access_list_id overwrite bug
Syzkaller reported the following WARN_ON: WARNING: CPU: 1 PID: 4738 at drivers/iommu/iommufd/io_pagetable.c:1360
Call Trace: iommufd_access_change_ioas+0x2fe/0x4e0 iommufd_access_destroy_object+0x50/0xb0 iommufd_object_remove+0x2a3/0x490 iommufd_object_destroy_user iommufd_access_destroy+0x71/0xb0 iommufd_test_staccess_release+0x89/0xd0 __fput+0x272/0xb50 __fput_sync+0x4b/0x60 __do_sys_close __se_sys_close __x64_sys_close+0x8b/0x110 do_syscall_x64
The mismatch between the access pointer in the list and the passed-in pointer is resulting from an overwrite of access->iopt_access_list_id, in iopt_add_access(). Called from iommufd_access_change_ioas() when xa_alloc() succeeds but iopt_calculate_iova_alignment() fails.
Add a new_id in iopt_add_access() and only update iopt_access_list_id when returning successfully.
AnalysisAI
State corruption in the Linux kernel iommufd subsystem (io_pagetable.c) allows a local low-privileged attacker to trigger a kernel WARN_ON leading to system instability or denial of service. The bug manifests in iopt_add_access() when xa_alloc() succeeds but iopt_calculate_iova_alignment() subsequently fails - the function overwrites access->iopt_access_list_id with the newly allocated XArray ID rather than rolling back cleanly, causing a pointer mismatch detected at line 1360 of io_pagetable.c. Discovered via Syzkaller fuzzing; no public exploit code exists and EPSS sits at 0.22% (13th percentile), indicating low real-world exploitation probability at time of analysis.
Technical ContextAI
The iommufd subsystem (drivers/iommu/iommufd/) is the Linux kernel's modern interface for managing I/O memory management units, primarily used in virtualization and device passthrough scenarios (e.g., VFIO/IOMMU device assignment to VMs). The CWE-476 tag (NULL Pointer Dereference) is a secondary consequence - the root cause is a state-consistency bug: iopt_add_access() allocates a slot via xa_alloc() then unconditionally writes the new ID into access->iopt_access_list_id before iopt_calculate_iova_alignment() confirms success. If alignment calculation fails, xa_alloc()'s slot is freed but the ID field is already overwritten, leaving the structure in an inconsistent state. On subsequent iommufd_access_change_ioas() or iommufd_access_destroy_object() calls, the mismatch between the list pointer and the passed-in pointer trips a WARN_ON assertion. Affected CPEs confirm this spans linux_kernel up through 6.8-rc6.
RemediationAI
Apply the upstream kernel patch available via the three stable-branch commits referenced in NVD: https://git.kernel.org/stable/c/9526a46cc0c378d381560279bea9aa34c84298a0, https://git.kernel.org/stable/c/aeb004c0cd6958e910123a1607634401009c9539, and https://git.kernel.org/stable/c/f1fb745ee0a6fe43f1d84ec369c7e6af2310fda9. Distribution vendors (Red Hat, Canonical, SUSE, Debian) should be consulted for their respective kernel errata. If patching is not immediately possible and iommufd is not required, restricting access to iommufd device nodes (typically /dev/iommu) via filesystem permissions or seccomp policies reduces the attack surface. Disabling VFIO and IOMMU passthrough at the hypervisor level is an effective workaround for environments that do not use device passthrough, at the cost of losing hardware-accelerated I/O virtualization. No exact patched release version is independently confirmed beyond the commit-level references.
Same weakness CWE-476 – NULL Pointer Dereference
View allSame technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today