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