In the Linux kernel, the following vulnerability has been resolved:
perf/core: Fix data race between perf_event_set_output() and perf_mmap_close()
Yang Jihing reported a race between perf_event_set_output() and perf_mmap_close():
CPU1 CPU2
perf_mmap_close(e2) if (atomic_dec_and_test(&e2->rb->mmap_count)) // 1 - > 0 detach_rest = true
ioctl(e1, IOC_SET_OUTPUT, e2) perf_event_set_output(e1, e2)
... list_for_each_entry_rcu(e, &e2->rb->event_list, rb_entry) ring_buffer_attach(e, NULL); // e1 isn't yet added and // therefore not detached
ring_buffer_attach(e1, e2->rb) list_add_rcu(&e1->rb_entry, &e2->rb->event_list)
After this; e1 is attached to an unmapped rb and a subsequent perf_mmap() will loop forever more:
again: mutex_lock(&e->mmap_mutex); if (event->rb) { ... if (!atomic_inc_not_zero(&e->rb->mmap_count)) { ... mutex_unlock(&e->mmap_mutex); goto again; } }
The loop in perf_mmap_close() holds e2->mmap_mutex, while the attach in perf_event_set_output() holds e1->mmap_mutex. As such there is no serialization to avoid this race.
Change perf_event_set_output() to take both e1->mmap_mutex and e2->mmap_mutex to alleviate that problem. Additionally, have the loop in perf_mmap() detach the rb directly, this avoids having to wait for the concurrent perf_mmap_close() to get around to doing it to make progress.
CVSS Details
- CVSS 3.1 Base Score: 4.7
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade python-perf-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-headersUpgrade kernel-tools-debuginfoUpgrade python-perfUpgrade kernel-debuginfo-common-x86_64Upgrade kernelUpgrade bpftoolUpgrade kernel-livepatch-4.14.290-217.505Upgrade kernel-toolsUpgrade kernel-debuginfoUpgrade perf-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade kernel-tools-develUpgrade kernel-livepatch-5.10.135-122.509Upgrade kernel-develUpgrade kernel-livepatch-5.15.59-33.133 | May 21, 2025 | Feb 26, 2025 |
| Debian | — | Upgrade linux | Feb 27, 2025 | Feb 27, 2025 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-toolsUpgrade bpftoolUpgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade kernel-tools-libsUpgrade kernel | Jun 11, 2025 | Feb 26, 2025 |
| Huawei Euleros 2_0_sp13 | — | Upgrade kernel-toolsUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernelUpgrade kernel-tools-libsUpgrade bpftool | Jul 1, 2025 | Feb 26, 2025 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Feb 26, 2025 |
| Ubuntu | — | Upgrade linux-bluefieldUpgrade linux-aws-5.15Upgrade linux-raspiUpgrade linux-lowlatency-hwe-5.15Upgrade linux-ibm-5.4Upgrade linux-raspi-5.4Upgrade linux-aws-5.4Upgrade linux-oracle-5.4Upgrade linuxUpgrade linux-azure-fdeUpgrade linux-gkeUpgrade linux-realtimeUpgrade linux-aws-hweUpgrade linux-awsUpgrade linux-gcp-4.15Upgrade linux-azure-fipsUpgrade linux-gcp-5.15Upgrade linux-gcp-fipsUpgrade linux-kvmUpgrade linux-ibmUpgrade linux-hweUpgrade linux-nvidiaUpgrade linux-gcp-5.4Upgrade linux-azureUpgrade linux-oracleUpgrade linux-oracle-5.15Upgrade linux-intel-iotg-5.15Upgrade linux-azure-4.15Upgrade linux-iotUpgrade linux-lowlatencyUpgrade linux-fipsUpgrade linux-gcpUpgrade linux-riscv-5.15Upgrade linux-hwe-5.15Upgrade linux-aws-fipsUpgrade linux-gkeopUpgrade linux-azure-5.4Upgrade linux-hwe-5.4Upgrade linux-azure-5.15Upgrade linux-intel-iotg | Mar 3, 2025 | Feb 26, 2025 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | May 27, 2026 | Feb 26, 2025 |
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