In the Linux kernel, the following vulnerability has been resolved:
drm/drm_file: Fix pid refcounting race
<[email protected]>, Maxime Ripard <[email protected]>, Thomas Zimmermann <[email protected]>
filp->pid is supposed to be a refcounted pointer; however, before this patch, drm_file_update_pid() only increments the refcount of a struct pid after storing a pointer to it in filp->pid and dropping the dev->filelist_mutex, making the following race possible:
process A process B ========= ========= begin drm_file_update_pid mutex_lock(&dev->filelist_mutex) rcu_replace_pointer(filp->pid, <pid B>, 1) mutex_unlock(&dev->filelist_mutex) begin drm_file_update_pid mutex_lock(&dev->filelist_mutex) rcu_replace_pointer(filp->pid, <pid A>, 1) mutex_unlock(&dev->filelist_mutex) get_pid(<pid A>) synchronize_rcu() put_pid(<pid B>) *** pid B reaches refcount 0 and is freed here *** get_pid(<pid B>) *** UAF *** synchronize_rcu() put_pid(<pid A>)
As far as I know, this race can only occur with CONFIG_PREEMPT_RCU=y because it requires RCU to detect a quiescent state in code that is not explicitly calling into the scheduler.
This race leads to use-after-free of a "struct pid". It is probably somewhat hard to hit because process A has to pass through a synchronize_rcu() operation while process B is between mutex_unlock() and get_pid().
Fix it by ensuring that by the time a pointer to the current task's pid is stored in the file, an extra reference to the pid has been taken.
This fix also removes the condition for synchronize_rcu(); I think that optimization is unnecessary complexity, since in that case we would usually have bailed out on the lockless check above.
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 |
|---|---|---|---|---|
| Debian | — | Upgrade linux | Jul 27, 2026 | Jul 27, 2026 |
| Redhat_linux | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Dec 5, 2024 | Jul 6, 2024 |
| Suse | — | Upgrade kernel-zfcpdumpUpgrade dtb-apmUpgrade dtb-rockchipUpgrade kernel-default-extraUpgrade kernel-obs-qaUpgrade kernel-default-vdsoUpgrade gfs2-kmp-azureUpgrade kernel-default-base-rebuildUpgrade kernel-rt-vdsoUpgrade kernel-kvmsmall-develUpgrade kernel-sourceUpgrade cluster-md-kmp-azureUpgrade kernel-azure-optionalUpgrade kselftests-kmp-64kbUpgrade dtb-amlogicUpgrade dlm-kmp-64kbUpgrade kernel-default-optionalUpgrade gfs2-kmp-rtUpgrade kernel-rt_debug-develUpgrade dtb-armUpgrade reiserfs-kmp-azureUpgrade cluster-md-kmp-rtUpgrade kernel-rt-extraUpgrade dtb-alteraUpgrade kernel-azure-develUpgrade kernel-azure-livepatch-develUpgrade kernel-kvmsmallUpgrade dtb-caviumUpgrade kernel-obs-buildUpgrade dtb-allwinnerUpgrade kernel-devel-rtUpgrade kernel-macrosUpgrade dtb-lgUpgrade gfs2-kmp-64kbUpgrade kernel-source-azureUpgrade kernel-rt-develUpgrade ocfs2-kmp-defaultUpgrade dtb-mediatekUpgrade dtb-exynosUpgrade dtb-xilinxUpgrade kernel-64kbUpgrade kernel-develUpgrade ocfs2-kmp-rtUpgrade dtb-qcomUpgrade kernel-devel-azureUpgrade kernel-rtUpgrade kernel-source-vanillaUpgrade kernel-syms-azureUpgrade kernel-rt_debug-vdsoUpgrade kernel-debug-vdsoUpgrade reiserfs-kmp-defaultUpgrade kernel-default-baseUpgrade ocfs2-kmp-azureUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-vdsoUpgrade kernel-azureUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-64kb-develUpgrade dtb-socionextUpgrade kernel-defaultUpgrade kernel-debug-develUpgrade dtb-sprdUpgrade dtb-freescaleUpgrade kernel-default-livepatch-develUpgrade kernel-64kb-extraUpgrade gfs2-kmp-defaultUpgrade dtb-broadcomUpgrade kselftests-kmp-defaultUpgrade kselftests-kmp-azureUpgrade kernel-docsUpgrade kernel-default-livepatchUpgrade dtb-appleUpgrade kernel-docs-htmlUpgrade dtb-nvidiaUpgrade dtb-amazonUpgrade kernel-rt-livepatch-develUpgrade reiserfs-kmp-rtUpgrade cluster-md-kmp-defaultUpgrade kernel-kvmsmall-vdsoUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-64kb-optionalUpgrade dtb-marvellUpgrade dtb-amdUpgrade dlm-kmp-rtUpgrade dlm-kmp-azureUpgrade kselftests-kmp-rtUpgrade dlm-kmp-defaultUpgrade kernel-syms-rtUpgrade kernel-source-rtUpgrade kernel-64kb-livepatch-develUpgrade kernel-symsUpgrade kernel-rt-optionalUpgrade kernel-debugUpgrade dtb-hisiliconUpgrade kernel-rt_debugUpgrade ocfs2-kmp-64kbUpgrade reiserfs-kmp-64kbUpgrade kernel-azure-extraUpgrade dtb-renesasUpgrade cluster-md-kmp-64kbUpgrade kernel-default-devel | Dec 5, 2025 | Sep 10, 2024 |
| Ubuntu | — | Upgrade linux-image-virtualUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-genericUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1017-nvidia-lowlatencyUpgrade linux-image-6.8.0-1015-oracleUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-6.8.0-1017-gcpUpgrade linux-image-6.8.0-48-genericUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-oem-22.04dUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1016-gcpUpgrade linux-image-oem-24.04Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-6.8.0-1013-gkeUpgrade linux-image-gkeUpgrade linux-image-nvidia-6.8Upgrade linux-image-oem-22.04Upgrade linux-image-gkeopUpgrade linux-image-6.8.0-48-lowlatency-64kUpgrade linux-image-6.8.0-1017-nvidia-lowlatency-64kUpgrade linux-image-azureUpgrade linux-image-gcpUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-6.8.0-1015-oracle-64kUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-6.8.0-1014-raspiUpgrade linux-image-6.8.0-1014-ibmUpgrade linux-image-oem-22.04cUpgrade linux-image-oem-22.04bUpgrade linux-image-6.8.0-1016-azure-fdeUpgrade linux-image-6.8.0-1017-nvidiaUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-gkeop-6.8Upgrade linux-image-6.8.0-1017-nvidia-64kUpgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-1016-oemUpgrade linux-image-raspiUpgrade linux-image-6.8.0-48-lowlatencyUpgrade linux-image-awsUpgrade linux-image-oem-24.04aUpgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-ibmUpgrade linux-image-6.8.0-48-generic-64kUpgrade linux-image-kvmUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-lowlatencyUpgrade linux-image-oracle-64kUpgrade linux-image-oem-22.04aUpgrade linux-image-nvidiaUpgrade linux-image-6.8.0-1017-azure-fdeUpgrade linux-image-nvidia-64kUpgrade linux-image-6.8.0-1018-awsUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1002-gkeopUpgrade linux-image-6.8.0-1017-azureUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-azure-fdeUpgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1016-azure | Nov 4, 2024 | Jul 6, 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