CVE-2022-49607

perf/core: Fix data race between perf_event_set_output() and perf_mmap_close()

MEDIUM
4.7
CVSS Score
Published: February 26, 2025 at 02:23 AM UTC
Updated: June 17, 2026 at 05:18 AM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM4.7
Exploit prediction
EPSS 0.2%
SSVC
No known exploit

Description

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.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

v ≥ 3.2.49v ≥ 3.4.52v ≥ 3.9.83.10 ≤ v < 4.14.2903.10 ≤ v < 4.19.2543.10 ≤ v < 4.9.3253.10 ≤ v < 5.10.1343.10 ≤ v < 5.15.583.10 ≤ v < 5.18.153.10 ≤ v < 5.193.10 ≤ v < 5.4.2083.2.49 ≤ v < 3.33.4.52 ≤ v < 3.53.9.8 ≤ v < 3.103.9.8 ≤ v < 4.9.3254.10 ≤ v < 4.14.2904.15 ≤ v < 4.19.2544.20 ≤ v < 5.4.2085.11 ≤ v < 5.15.585.16 ≤ v < 5.18.155.5 ≤ v < 5.10.1342487f0db30527032c4d56fc2d0b1a240fe89fef83.2.493.4.523.9.85.19 rc15.19 rc25.19 rc35.19 rc45.19 rc55.19 rc6703197b61d05f5edae54bad3256901c5a5c8794c9bb5d40cd93c9dd4be74834b1dcb1ba03629716bc52217e88ae0f3a4ae00562d86e338f8f85969b4
Vendor states this is fixed in 17f5417194136517ee9bbd6511249e5310e5617c (fixed)
Vendor states this is fixed in 3bbd868099287ff9027db59029b502fcfa2202a0 (fixed)
Vendor states this is fixed in 43128b3eee337824158f34da6648163d2f2fb937 (fixed)
Vendor states this is fixed in 68e3c69803dada336893640110cb87221bb01dcf (fixed)
Vendor states this is fixed in 98c3c8fd0d4c560e0f8335b79c407bbf7fc9462c (fixed)
Vendor states this is fixed in a9391ff7a7c5f113d6f2bf6621d49110950de49c (fixed)
Vendor states this is fixed in da3c256e2d0ebc87c7db0c605c9692b6f1722074 (fixed)
Vendor states this is fixed in f836f9ac95df15f1e0af4beb0ec20021e8c91998 (fixed)
Vendor states this is fixed in 3.10 (unaffected)
Affected range stops below 3.3, so it looks safe — our inference, not a vendor statement
Affected range stops below 3.5, so it looks safe — our inference, not a vendor statement
Vendor states this is fixed in 4.14.290 (unaffected)
Vendor states this is fixed in 4.19.254 (unaffected)
Vendor states this is fixed in 4.9.325 (unaffected)
Vendor states this is fixed in 5.10.134 (unaffected)
Vendor states this is fixed in 5.15.58 (unaffected)
Vendor states this is fixed in 5.18.15 (unaffected)
Vendor states this is fixed in 5.19 (unaffected)
Vendor states this is fixed in 5.4.208 (unaffected)

References (8)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/17f5417194136517ee9bbd6511249e5310e5617c
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/3bbd868099287ff9027db59029b502fcfa2202a0
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/43128b3eee337824158f34da6648163d2f2fb937
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/68e3c69803dada336893640110cb87221bb01dcf
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/98c3c8fd0d4c560e0f8335b79c407bbf7fc9462c
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/a9391ff7a7c5f113d6f2bf6621d49110950de49c
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/da3c256e2d0ebc87c7db0c605c9692b6f1722074
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/f836f9ac95df15f1e0af4beb0ec20021e8c91998

SSVC — Action Prioritization

SSVCNo known exploitNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

4.7MEDIUMCISA-ADP
Attack Vector
LOCAL
Complexity
HIGH
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Vector?

Quick Info

StatusMODIFIED
CWE
CWE-362

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card