In the Linux kernel, the following vulnerability has been resolved:
drm/i915/vma: Fix UAF on destroy against retire race
Object debugging tools were sporadically reporting illegal attempts to free a still active i915 VMA object when parking a GT believed to be idle.
[161.359441] ODEBUG: free active (active state 0) object: ffff88811643b958 object type: i915_active hint: __i915_vma_active+0x0/0x50 [i915] [161.360082] WARNING: CPU: 5 PID: 276 at lib/debugobjects.c:514 debug_print_object+0x80/0xb0 ... [161.360304] CPU: 5 PID: 276 Comm: kworker/5:2 Not tainted 6.5.0-rc1-CI_DRM_13375-g003f860e5577+ #1 [161.360314] Hardware name: Intel Corporation Rocket Lake Client Platform/RocketLake S UDIMM 6L RVP, BIOS RKLSFWI1.R00.3173.A03.2204210138 04/21/2022 [161.360322] Workqueue: i915-unordered __intel_wakeref_put_work [i915] [161.360592] RIP: 0010:debug_print_object+0x80/0xb0 ... [161.361347] debug_object_free+0xeb/0x110 [161.361362] i915_active_fini+0x14/0x130 [i915] [161.361866] release_references+0xfe/0x1f0 [i915] [161.362543] i915_vma_parked+0x1db/0x380 [i915] [161.363129] __gt_park+0x121/0x230 [i915] [161.363515] ____intel_wakeref_put_last+0x1f/0x70 [i915]
That has been tracked down to be happening when another thread is deactivating the VMA inside __active_retire() helper, after the VMA's active counter has been already decremented to 0, but before deactivation of the VMA's object is reported to the object debugging tool.
We could prevent from that race by serializing i915_active_fini() with __active_retire() via ref->tree_lock, but that wouldn't stop the VMA from being used, e.g. from __i915_vma_retire() called at the end of __active_retire(), after that VMA has been already freed by a concurrent i915_vma_destroy() on return from the i915_active_fini(). Then, we should rather fix the issue at the VMA level, not in i915_active.
Since __i915_vma_parked() is called from __gt_park() on last put of the GT's wakeref, the issue could be addressed by holding the GT wakeref long enough for __active_retire() to complete before that wakeref is released and the GT parked.
I believe the issue was introduced by commit d93939730347 ("drm/i915: Remove the vma refcount") which moved a call to i915_active_fini() from a dropped i915_vma_release(), called on last put of the removed VMA kref, to i915_vma_parked() processing path called on last put of a GT wakeref. However, its visibility to the object debugging tool was suppressed by a bug in i915_active that was fixed two weeks later with commit e92eb246feb9 ("drm/i915/active: Fix missing debug object activation").
A VMA associated with a request doesn't acquire a GT wakeref by itself. Instead, it depends on a wakeref held directly by the request's active intel_context for a GT associated with its VM, and indirectly on that intel_context's engine wakeref if the engine belongs to the same GT as the VMA's VM. Those wakerefs are released asynchronously to VMA deactivation.
Fix the issue by getting a wakeref for the VMA's GT when activating it, and putting that wakeref only after the VMA is deactivated. However, exclude global GTT from that processing path, otherwise the GPU never goes idle. Since __i915_vma_retire() may be called from atomic contexts, use async variant of wakeref put. Also, to avoid circular locking dependency, take care of acquiring the wakeref before VM mutex when both are needed.
v7: Add inline comments with justifications for: - using untracked variants of intel_gt_pm_get/put() (Nirmoy), - using async variant of _put(), - not getting the wakeref in case of a global GTT, - always getting the first wakeref outside vm->mutex. v6: Since __i915_vma_active/retire() callbacks are not serialized, storing a wakeref tracking handle inside struct i915_vma is not safe, and there is no other good place for that. Use untracked variants of intel_gt_pm_get/put_async(). v5: Replace "tile" with "GT" across commit description (Rodrigo), - ---truncated---
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-rt-modulesUpgrade bpftoolUpgrade kernel-rt-debug-modulesUpgrade kernel-zfcpdump-coreUpgrade kernel-modulesUpgrade kernel-rtUpgrade kernel-tools-libs-develUpgrade kernel-zfcpdumpUpgrade kernel-debug-modules-extraUpgrade kernel-rt-debug-modules-extraUpgrade kernel-zfcpdump-modulesUpgrade kernel-docUpgrade kernel-rt-kvmUpgrade kernel-debug-modulesUpgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade perfUpgrade python3-perfUpgrade kernel-headersUpgrade kernel-rt-develUpgrade kernel-rt-debug-develUpgrade kernel-rt-debugUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-modules-extraUpgrade kernel-cross-headersUpgrade kernel-rt-coreUpgrade kernel-rt-debug-kvmUpgrade kernel-debug-coreUpgrade kernel-rt-debug-coreUpgrade kernel-coreUpgrade kernel-modules-extraUpgrade kernel-debug-develUpgrade kernel-develUpgrade kernel-zfcpdump-develUpgrade kernelUpgrade kernel-debug | Sep 26, 2024 | May 1, 2024 |
| Amazon_linux_2023 | — | Upgrade kernel-modules-extra-commonUpgrade kernel-tools-develUpgrade bpftoolUpgrade perfUpgrade kernel-toolsUpgrade perf-debuginfoUpgrade kernel-livepatch-6.1.90-99.173Upgrade kernel-develUpgrade kernel-debuginfo-common-aarch64Upgrade python3-perfUpgrade kernel-libbpf-develUpgrade kernel-tools-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-modules-extraUpgrade bpftool-debuginfoUpgrade kernel-libbpf-staticUpgrade kernel-headersUpgrade kernelUpgrade kernel-libbpf | Feb 17, 2025 | May 1, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | May 1, 2024 |
| Oracle_linux | — | Upgrade kernel | Oct 16, 2024 | May 1, 2024 |
| Redhat_linux | — | No solution existsUpgrade kernel-rtUpgrade kernel | Sep 25, 2024 | May 1, 2024 |
| Rocky_linux | — | Upgrade kernel-debuginfo-common-x86_64Upgrade python3-perf-debuginfoUpgrade kernel-debug-develUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-tools-libs-develUpgrade kernel-rt-debug-coreUpgrade kernelUpgrade kernel-rt-coreUpgrade kernel-rt-modules-extraUpgrade bpftoolUpgrade kernel-cross-headersUpgrade kernel-debug-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-rt-kvmUpgrade kernel-tools-debuginfoUpgrade kernel-debug-modules-extraUpgrade kernel-headersUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-tools-libsUpgrade kernel-debuginfoUpgrade kernel-debugUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-develUpgrade kernel-rt-debugUpgrade kernel-modules-extraUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-modulesUpgrade kernel-debug-coreUpgrade kernel-coreUpgrade python3-perfUpgrade kernel-modulesUpgrade perfUpgrade kernel-rt-debug-develUpgrade kernel-rt-debuginfoUpgrade kernel-toolsUpgrade kernel-rtUpgrade perf-debuginfoUpgrade kernel-devel | Oct 2, 2024 | May 1, 2024 |
| Suse | — | Upgrade dtb-marvellUpgrade ocfs2-kmp-64kbUpgrade kernel-azure-vdsoUpgrade kernel-default-livepatchUpgrade kernel-64kbUpgrade kernel-64kb-extraUpgrade kernel-azure-extraUpgrade kernel-rt_debug-livepatch-develUpgrade ocfs2-kmp-rtUpgrade cluster-md-kmp-azureUpgrade kernel-default-livepatch-develUpgrade kernel-rt_debug-develUpgrade kernel-rt-vdsoUpgrade kernel-source-vanillaUpgrade cluster-md-kmp-defaultUpgrade dtb-appleUpgrade kernel-azureUpgrade kernel-rt-livepatch-develUpgrade kernel-zfcpdumpUpgrade kernel-rt-optionalUpgrade kernel-default-baseUpgrade dtb-hisiliconUpgrade dlm-kmp-defaultUpgrade kernel-source-rtUpgrade kernel-kvmsmall-vdsoUpgrade kernel-docsUpgrade gfs2-kmp-64kbUpgrade kernel-debug-develUpgrade dtb-broadcomUpgrade kernel-docs-htmlUpgrade dtb-amdUpgrade dtb-amazonUpgrade kernel-debug-vdsoUpgrade reiserfs-kmp-rtUpgrade kernel-debug-livepatch-develUpgrade kernel-default-extraUpgrade kernel-syms-rtUpgrade reiserfs-kmp-64kbUpgrade dtb-amlogicUpgrade kselftests-kmp-rtUpgrade kernel-macrosUpgrade kernel-azure-optionalUpgrade kernel-source-azureUpgrade kernel-kvmsmall-develUpgrade dtb-lgUpgrade kernel-rt_debug-vdsoUpgrade kselftests-kmp-azureUpgrade dtb-freescaleUpgrade kselftests-kmp-defaultUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-renesasUpgrade reiserfs-kmp-defaultUpgrade kernel-64kb-livepatch-develUpgrade kernel-64kb-optionalUpgrade kernel-debugUpgrade kernel-default-develUpgrade kernel-rt_debugUpgrade dlm-kmp-azureUpgrade dtb-socionextUpgrade kernel-devel-azureUpgrade dtb-xilinxUpgrade kernel-defaultUpgrade dtb-sprdUpgrade dtb-qcomUpgrade reiserfs-kmp-azureUpgrade kernel-rtUpgrade gfs2-kmp-defaultUpgrade kernel-sourceUpgrade kernel-rt-extraUpgrade gfs2-kmp-azureUpgrade dlm-kmp-64kbUpgrade cluster-md-kmp-64kbUpgrade dtb-allwinnerUpgrade kernel-default-optionalUpgrade kernel-obs-buildUpgrade dtb-rockchipUpgrade dtb-armUpgrade kernel-default-base-rebuildUpgrade dtb-nvidiaUpgrade dtb-apmUpgrade kernel-rt-develUpgrade kernel-kvmsmallUpgrade kernel-azure-livepatch-develUpgrade kernel-devel-rtUpgrade kselftests-kmp-64kbUpgrade gfs2-kmp-rtUpgrade kernel-develUpgrade dtb-mediatekUpgrade cluster-md-kmp-rtUpgrade kernel-symsUpgrade dtb-alteraUpgrade dlm-kmp-rtUpgrade ocfs2-kmp-defaultUpgrade kernel-rt-livepatchUpgrade kernel-syms-azureUpgrade dtb-caviumUpgrade kernel-obs-qaUpgrade kernel-64kb-develUpgrade kernel-default-vdsoUpgrade ocfs2-kmp-azureUpgrade kernel-azure-develUpgrade dtb-exynos | May 15, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-genericUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-gcpUpgrade linux-image-kvmUpgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-6.8.0-1008-azureUpgrade linux-image-oracle-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-raspiUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-azureUpgrade linux-image-azure-fdeUpgrade linux-image-oem-24.04aUpgrade linux-image-oracleUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-ibmUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-oem-24.04Upgrade linux-image-gkeUpgrade linux-image-lowlatencyUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-virtualUpgrade linux-image-awsUpgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-1009-aws | Jul 1, 2024 | May 1, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Oct 14, 2025 | May 1, 2024 |
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