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---
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-rt-kvmUpgrade kernel-zfcpdump-coreUpgrade kernel-rt-modulesUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernel-rtUpgrade kernel-docUpgrade kernel-toolsUpgrade kernel-zfcpdumpUpgrade kernel-rt-debug-modules-extraUpgrade kernel-zfcpdump-modulesUpgrade kernel-rt-debug-modulesUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-tools-libsUpgrade kernel-tools-libs-develUpgrade kernel-debug-modulesUpgrade kernelUpgrade kernel-rt-debugUpgrade kernel-rt-develUpgrade kernel-debugUpgrade kernel-rt-debug-develUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-debug-coreUpgrade python3-perfUpgrade kernel-debug-develUpgrade kernel-rt-modules-extraUpgrade kernel-modules-extraUpgrade perfUpgrade kernel-coreUpgrade kernel-cross-headersUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-coreUpgrade kernel-rt-coreUpgrade kernel-develUpgrade kernel-headersUpgrade kernel-zfcpdump-devel | Sep 26, 2024 | May 1, 2024 |
| Amazon_linux_2023 | — | Upgrade python3-perf-debuginfoUpgrade kernel-libbpfUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-modules-extraUpgrade bpftool-debuginfoUpgrade kernelUpgrade kernel-libbpf-staticUpgrade kernel-headersUpgrade kernel-tools-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-debuginfoUpgrade kernel-toolsUpgrade kernel-livepatch-6.1.90-99.173Upgrade perfUpgrade python3-perfUpgrade perf-debuginfoUpgrade kernel-tools-develUpgrade kernel-modules-extra-commonUpgrade kernel-develUpgrade kernel-debuginfo-common-aarch64Upgrade bpftool | 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 | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Sep 25, 2024 | May 1, 2024 |
| Rocky_linux | — | Upgrade kernel-rt-debug-kvmUpgrade kernel-tools-libs-develUpgrade kernel-rt-coreUpgrade bpftoolUpgrade kernel-tools-libsUpgrade bpftool-debuginfoUpgrade kernel-debug-debuginfoUpgrade kernel-rt-kvmUpgrade kernel-rt-modules-extraUpgrade kernel-debug-develUpgrade kernel-rt-debug-debuginfoUpgrade kernel-debugUpgrade kernelUpgrade kernel-headersUpgrade kernel-cross-headersUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-debug-modulesUpgrade kernel-rt-debug-coreUpgrade python3-perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-debug-modules-extraUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debugUpgrade perf-debuginfoUpgrade kernel-coreUpgrade perfUpgrade kernel-rt-debug-develUpgrade kernel-rt-debuginfoUpgrade kernel-modulesUpgrade kernel-modules-extraUpgrade kernel-rt-develUpgrade kernel-rtUpgrade python3-perfUpgrade kernel-rt-debug-modules-extraUpgrade kernel-toolsUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-modulesUpgrade kernel-debug-coreUpgrade kernel-devel | Oct 2, 2024 | May 1, 2024 |
| Suse | — | Upgrade ocfs2-kmp-azureUpgrade ocfs2-kmp-defaultUpgrade gfs2-kmp-rtUpgrade dtb-caviumUpgrade kernel-rt-extraUpgrade kernel-sourceUpgrade gfs2-kmp-azureUpgrade dtb-exynosUpgrade dlm-kmp-rtUpgrade cluster-md-kmp-64kbUpgrade dtb-rockchipUpgrade dlm-kmp-64kbUpgrade dtb-armUpgrade kernel-obs-buildUpgrade dtb-allwinnerUpgrade kernel-64kb-develUpgrade dtb-qcomUpgrade dtb-alteraUpgrade reiserfs-kmp-azureUpgrade kernel-azure-develUpgrade dtb-sprdUpgrade gfs2-kmp-defaultUpgrade kernel-default-vdsoUpgrade kernel-rt-livepatchUpgrade kernel-obs-qaUpgrade kselftests-kmp-64kbUpgrade kernel-rtUpgrade kernel-default-optionalUpgrade kernel-devel-rtUpgrade kernel-defaultUpgrade kernel-rt-develUpgrade cluster-md-kmp-rtUpgrade kernel-symsUpgrade dtb-xilinxUpgrade kernel-azure-livepatch-develUpgrade dtb-nvidiaUpgrade kernel-default-base-rebuildUpgrade kernel-devel-azureUpgrade kernel-kvmsmallUpgrade dtb-apmUpgrade kernel-syms-azureUpgrade kernel-develUpgrade dtb-mediatekUpgrade kselftests-kmp-defaultUpgrade kernel-debugUpgrade kernel-docs-htmlUpgrade reiserfs-kmp-64kbUpgrade kernel-syms-rtUpgrade kernel-macrosUpgrade kernel-kvmsmall-develUpgrade kernel-azure-optionalUpgrade dtb-amlogicUpgrade dtb-amdUpgrade dlm-kmp-defaultUpgrade dtb-hisiliconUpgrade dtb-lgUpgrade kernel-source-vanillaUpgrade dlm-kmp-azureUpgrade kernel-zfcpdumpUpgrade dtb-socionextUpgrade dtb-appleUpgrade kernel-64kb-optionalUpgrade kernel-64kb-livepatch-develUpgrade kernel-default-develUpgrade reiserfs-kmp-defaultUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-azure-extraUpgrade kernel-64kb-extraUpgrade kernel-64kbUpgrade dtb-marvellUpgrade cluster-md-kmp-azureUpgrade ocfs2-kmp-64kbUpgrade kernel-azure-vdsoUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-rt_debug-develUpgrade kernel-default-livepatch-develUpgrade ocfs2-kmp-rtUpgrade kernel-default-livepatchUpgrade kernel-rt_debugUpgrade kernel-rt-vdsoUpgrade kernel-default-extraUpgrade dtb-renesasUpgrade kselftests-kmp-rtUpgrade kselftests-kmp-azureUpgrade kernel-kvmsmall-vdsoUpgrade kernel-docsUpgrade kernel-debug-develUpgrade dtb-broadcomUpgrade kernel-debug-vdsoUpgrade kernel-debug-livepatch-develUpgrade cluster-md-kmp-defaultUpgrade gfs2-kmp-64kbUpgrade reiserfs-kmp-rtUpgrade kernel-rt-livepatch-develUpgrade kernel-azureUpgrade dtb-freescaleUpgrade dtb-amazonUpgrade kernel-source-rtUpgrade kernel-rt-optionalUpgrade kernel-default-baseUpgrade kernel-source-azureUpgrade kernel-rt_debug-vdso | May 15, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64kUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-raspiUpgrade linux-image-azure-fdeUpgrade linux-image-kvmUpgrade linux-image-genericUpgrade linux-image-gcpUpgrade linux-image-6.8.0-1008-azureUpgrade linux-image-azureUpgrade linux-image-oracle-64kUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-oem-24.04aUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-awsUpgrade linux-image-generic-lpaeUpgrade linux-image-gkeUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-ibmUpgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-lowlatencyUpgrade linux-image-virtual | 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 |
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