CVE-2024-43870
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
21/08/2024
Last modified:
03/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
perf: Fix event leak upon exit<br />
<br />
When a task is scheduled out, pending sigtrap deliveries are deferred<br />
to the target task upon resume to userspace via task_work.<br />
<br />
However failures while adding an event&#39;s callback to the task_work<br />
engine are ignored. And since the last call for events exit happen<br />
after task work is eventually closed, there is a small window during<br />
which pending sigtrap can be queued though ignored, leaking the event<br />
refcount addition such as in the following scenario:<br />
<br />
TASK A<br />
-----<br />
<br />
do_exit()<br />
exit_task_work(tsk);<br />
<br />
<br />
perf_event_overflow()<br />
event->pending_sigtrap = pending_id;<br />
irq_work_queue(&event->pending_irq);<br />
<br />
=========> PREEMPTION: TASK A -> TASK B<br />
event_sched_out()<br />
event->pending_sigtrap = 0;<br />
atomic_long_inc_not_zero(&event->refcount)<br />
// FAILS: task work has exited<br />
task_work_add(&event->pending_task)<br />
[...]<br />
<br />
perf_pending_irq()<br />
// early return: event->oncpu = -1<br />
<br />
[...]<br />
=========> TASK B -> TASK A<br />
perf_event_exit_task(tsk)<br />
perf_event_exit_event()<br />
free_event()<br />
WARN(atomic_long_cmpxchg(&event->refcount, 1, 0) != 1)<br />
// leak event due to unexpected refcount == 2<br />
<br />
As a result the event is never released while the task exits.<br />
<br />
Fix this with appropriate task_work_add()&#39;s error handling.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.15.84 (including) | 5.15.165 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.0.14 (including) | 6.1 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.1.1 (including) | 6.1.103 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.44 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.10.3 (excluding) |
| cpe:2.3:o:linux:linux_kernel:6.1:-:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.1:rc8:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/05d3fd599594abf79aad4484bccb2b26e1cb0b51
- https://git.kernel.org/stable/c/2fd5ad3f310de22836cdacae919dd99d758a1f1b
- https://git.kernel.org/stable/c/3d7a63352a93bdb8a1cdf29606bf617d3ac1c22a
- https://git.kernel.org/stable/c/67fad724f1b568b356c1065d50df46e6b30eb2f7
- https://git.kernel.org/stable/c/70882d7fa74f0731492a0d493e8515a4f7131831
- https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html



