Vulnerability · Published Jul 6, 2024 · Assigned by Linux

CVE-2024-39486drm/drm_file: Fix pid refcounting race

High 7.8

In plain English

A high-severity security flaw in Linux from Linux. There are no confirmed reports of exploitation so far. The chance it is exploited in the next 30 days is estimated at 0.2% (higher than 14% of all known vulnerabilities). Fixed versions are available - upgrade the affected package.

Severity (CVSS 3.1)7.8High
Exploit odds (30 days)0.2%top 86.2% of all CVEs
Exploited in the wildNo reportsCISA SSVC: none
Attack toolingNoneno public tooling known

Official description

In the Linux kernel, the following vulnerability has been resolved: drm/drm_file: Fix pid refcounting race <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, Thomas Zimmermann <tzimmermann@suse.de> 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.

Affected packages & fixed versions

EcosystemPackageFixed inAdvisory
Debian:13linux6.9.8-1DEBIAN-CVE-2024-39486
Debian:14linux6.9.8-1DEBIAN-CVE-2024-39486
Ubuntu:24.04:LTSlinux6.8.0-48.48USN-7089-1
Ubuntu:24.04:LTSlinux6.8.0-48.48UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-allwinner-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-aws6.8.0-1018.20UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-aws6.8.0-1018.20USN-7089-3
Ubuntu:22.04:LTSlinux-aws-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-aws-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-aws-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1018.19~22.04.1USN-7089-3
Ubuntu:22.04:LTSlinux-aws-6.86.8.0-1018.19~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-azure6.8.0-1017.20UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-azure6.8.0-1017.20USN-7089-2
Ubuntu:22.04:LTSlinux-azure-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-azure-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-azure-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1017.20~22.04.1USN-7090-1
Ubuntu:22.04:LTSlinux-azure-6.86.8.0-1017.20~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-azure-fde-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-azure-fde-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-gcp6.8.0-1017.19USN-7089-2
Ubuntu:24.04:LTSlinux-gcp6.8.0-1017.19UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-gcp-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-gcp-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-gcp-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1017.19~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-gcp-6.86.8.0-1017.19~22.04.1USN-7089-1
Ubuntu:24.04:LTSlinux-gke6.8.0-1013.17USN-7089-6
Ubuntu:24.04:LTSlinux-gke6.8.0-1013.17UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1002.4UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-gkeop6.8.0-1002.4USN-7156-1
Ubuntu:22.04:LTSlinux-hwe-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-hwe-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-hwe-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-48.48~22.04.1USN-7089-1
Ubuntu:22.04:LTSlinux-hwe-6.86.8.0-48.48~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-ibm6.8.0-1015.15UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-ibm6.8.0-1015.15USN-7089-2
Ubuntu:22.04:LTSlinux-intel-iot-realtimeno fix listedUBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-48.48.3UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-lowlatency6.8.0-48.48.3USN-7089-7
Ubuntu:22.04:LTSlinux-lowlatency-hwe-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-48.48.3~22.04.1USN-7089-7
Ubuntu:22.04:LTSlinux-lowlatency-hwe-6.86.8.0-48.48.3~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1017.19UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-nvidia6.8.0-1017.19USN-7095-1
Ubuntu:22.04:LTSlinux-nvidia-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-nvidia-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1017.19~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-nvidia-6.86.8.0-1017.19~22.04.1USN-7095-1
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1017.19.1USN-7095-1
Ubuntu:24.04:LTSlinux-nvidia-lowlatency6.8.0-1017.19.1UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oem-5.17no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oem-6.0no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oem-6.1no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oem-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1016.16USN-7089-4
Ubuntu:24.04:LTSlinux-oem-6.86.8.0-1016.16UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-oracle6.8.0-1015.16USN-7089-3
Ubuntu:24.04:LTSlinux-oracle6.8.0-1015.16UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oracle-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1015.15~22.04.1UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-oracle-6.86.8.0-1015.15~22.04.1USN-7089-3
Ubuntu:24.04:LTSlinux-raspi6.8.0-1014.16UBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-raspi6.8.0-1014.16USN-7089-5
Ubuntu:22.04:LTSlinux-realtimeno fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-riscvno fix listedUBUNTU-CVE-2024-39486
Ubuntu:24.04:LTSlinux-riscv6.8.0-48.48.1UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-riscv-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-riscv-6.5no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-riscv-6.86.8.0-48.48.1~22.04.2UBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-starfive-5.19no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-starfive-6.2no fix listedUBUNTU-CVE-2024-39486
Ubuntu:22.04:LTSlinux-starfive-6.5no fix listedUBUNTU-CVE-2024-39486

Affected products (as reported)

VendorProductVersions
Linux Linux 031ddd28008971cce0b5626379b910d0a05fb4dd – before 16682588ead4a593cf1aebb33b36df4d1e9e4ffa1c7a387ffef894b1ab3942f0482dac7a6e0a909c – before 0acce2a5c619ef1abdee783d7fea5eac78ce48441c7a387ffef894b1ab3942f0482dac7a6e0a909c – before 4f2a129b33a2054e62273edd5a051c34c08d96e96.6.9 – before 6.6.37
Linux Linux 6.7

References