CVE-2025-37747 json
perf: Fix hang while freeing sigtrap event
published 2025-05-01 18 mo ago modified 2026-11-05 3 d ago also EUVD-2025-13078
- cvss
- 5.5
- version 3.1, NVD
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 16%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
perf: Fix hang while freeing sigtrap event
Perf can hang while freeing a sigtrap event if a related deferred signal hadn't managed to be sent before the file got closed:
perf_event_overflow() task_work_add(perf_pending_task)
fput() task_work_add(____fput())
task_work_run() ____fput() perf_release() perf_event_release_kernel() _free_event() perf_pending_task_sync() task_work_cancel() -> FAILED rcuwait_wait_event()
Once task_work_run() is running, the list of pending callbacks is removed from the task_struct and from this point on task_work_cancel() can't remove any pending and not yet started work items, hence the task_work_cancel() failure and the hang on rcuwait_wait_event().
Task work could be changed to remove one work at a time, so a work running on the current task can always cancel a pending one, however the wait / wake design is still subject to inverted dependencies when remote targets are involved, as pictured by Oleg:
T1 T2
fd = perf_event_open(pid => T2->pid); fd = perf_event_open(pid => T1->pid); close(fd) close(fd) <IRQ> <IRQ> perf_event_overflow() perf_event_overflow() task_work_add(perf_pending_task) task_work_add(perf_pending_task) </IRQ> </IRQ> fput() fput() task_work_add(____fput()) task_work_add(____fput())
task_work_run() task_work_run() ____fput() ____fput() perf_release() perf_release() perf_event_release_kernel() perf_event_release_kernel() _free_event() _free_event() perf_pending_task_sync() perf_pending_task_sync() rcuwait_wait_event() rcuwait_wait_event()
Therefore the only option left is to acquire the event reference count upon queueing the perf task work and release it from the task work, just like it was done before 3a5465418f5f ("perf: Fix event leak upon exec and file release") but without the leaks it fixed.
Some adjustments are necessary to make it work:
* A child event might dereference its parent upon freeing. Care must be taken to release the parent last.
* Some places assuming the event doesn't have any reference held and therefore can be freed right away must instead put the reference and let the reference counting to its job.
Patch / fix
- Linux Linux 5.16, 6.1.191, 6.6.160, 6.11, 6.12.24, 6.13.12, 6.14.3, 6.15
- linux Debian 14, Debian 13 6.12.25-1
debian advisories DEBIAN-CVE-2025-37747
- kernel-coco SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-syms-coco SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-coco_debug SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-source-coco SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-rt Real Time Module 15 SP7 6.4.0-150700.7.8.1
- kernel-syms-rt Real Time Module 15 SP7 6.4.0-150700.7.8.1
- kernel-source-rt Real Time Module 15 SP7 6.4.0-150700.7.8.1
- kernel-64kb SLE Module for Basesystem 15 SP7 6.4.0-150700.53.6.1
suse advisories SUSE-SU-2025:02923-1SUSE-SU-2025:02333-1SUSE-SU-2025:02307-1SUSE-SU-2025:02254-1SUSE-SU-2025:02000-1SUSE-SU-2025:01972-1
- git.kernel.org/stable/c/20ab73bb467d900662dca043452aadecb2db8338 commit
- git.kernel.org/stable/c/aae58a39ac4c63c3fa53536fb2504c9f1d0e1719 commit
- git.kernel.org/stable/c/fa1827fa968c0674e9b6fca223fa9fb4da4493eb commit
- git.kernel.org/stable/c/665b87b8f8b3aeb49083ef3b65c4953e7753fc12 commit
- git.kernel.org/stable/c/1267bd38f161c1a27d9b722de017027167a225a0 commit
- git.kernel.org/stable/c/56799bc035658738f362acec3e7647bb84e68933 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2025-37747 updated cvss 4.7
kernel: perf: Fix hang while freeing sigtrap event
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 moreaffected: no fix planned “Out of support scope”
-
Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelaffected: no fix available “Fix deferred”
-
Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 3 d ago
Exploit prediction
0.25% chance of exploitation in the next 30 days, higher than 16% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Technology feeds
References
- git.kernel.org /stable/c/20ab73bb467d900662dca043452aadecb2db8338
- git.kernel.org /stable/c/aae58a39ac4c63c3fa53536fb2504c9f1d0e1719
-
git.kernel.org
/stable/c/fa1827fa968c0674e9b6fca223fa9fb4da4493eb
patch
-
git.kernel.org
/stable/c/665b87b8f8b3aeb49083ef3b65c4953e7753fc12
patch
-
git.kernel.org
/stable/c/1267bd38f161c1a27d9b722de017027167a225a0
patch
-
git.kernel.org
/stable/c/56799bc035658738f362acec3e7647bb84e68933
patch
Sources
- CVE List CVE-2025-37747
- NVD CVE-2025-37747
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.