CVE-2024-43870

In the Linux kernel, the following vulnerability has been resolved: perf: Fix event leak upon exit When a task is scheduled out, pending sigtrap deliveries are deferred to the target task upon resume to userspace via task_work. However failures while adding an event's callback to the task_work engine are ignored. And since the last call for events exit happen after task work is eventually closed, there is a small window during which pending sigtrap can be queued though ignored, leaking the event refcount addition such as in the following scenario: TASK A ----- do_exit() exit_task_work(tsk); <IRQ> perf_event_overflow() event->pending_sigtrap = pending_id; irq_work_queue(&event->pending_irq); </IRQ> =========> PREEMPTION: TASK A -> TASK B event_sched_out() event->pending_sigtrap = 0; atomic_long_inc_not_zero(&event->refcount) // FAILS: task work has exited task_work_add(&event->pending_task) [...] <IRQ WORK> perf_pending_irq() // early return: event->oncpu = -1 </IRQ WORK> [...] =========> TASK B -> TASK A perf_event_exit_task(tsk) perf_event_exit_event() free_event() WARN(atomic_long_cmpxchg(&event->refcount, 1, 0) != 1) // leak event due to unexpected refcount == 2 As a result the event is never released while the task exits. Fix this with appropriate task_work_add()'s error handling.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:-:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:rc8:*:*:*:*:*:*

History

26 Sep 2025, 18:36

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se resolvió la siguiente vulnerabilidad: perf: corrige la fuga de eventos al salir Cuando se programa una tarea, las entregas de sigtrap pendientes se difieren a la tarea de destino al reanudarse en el espacio de usuario a través de task_work. Sin embargo, se ignoran los fallos al agregar la devolución de llamada de un evento al motor task_work. Y dado que la última llamada para la salida de eventos ocurre después de que finalmente se cierra el trabajo de la tarea, hay una pequeña ventana durante la cual el sigtrap pendiente se puede poner en cola aunque se ignore, lo que filtra la adición del recuento de eventos, como en el siguiente escenario: TAREA A ----- do_exit() salida_task_work(tsk); perf_event_overflow() evento-&gt;pending_sigtrap = pendiente_id; irq_work_queue(&amp;event-&gt;pending_irq); =========&gt; PREEMPCIÓN: TAREA A -&gt; TAREA B event_sched_out() evento-&gt;pending_sigtrap = 0; atomic_long_inc_not_zero(&amp;event-&gt;refcount) // FALLA: el trabajo de la tarea ha salido task_work_add(&amp;event-&gt;pending_task) [...] perf_pending_irq() // retorno temprano: evento-&gt;oncpu = -1 [...] =========&gt; TAREA B -&gt; TAREA A perf_event_exit_task(tsk) perf_event_exit_event() free_event() WARN(atomic_long_cmpxchg(&amp;event-&gt;refcount, 1, 0) != 1) / /evento de fuga debido a un recuento inesperado == 2 Como resultado, el evento nunca se libera mientras la tarea finaliza. Solucione este problema con el manejo de errores apropiado de task_work_add().
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
References () https://git.kernel.org/stable/c/05d3fd599594abf79aad4484bccb2b26e1cb0b51 - () https://git.kernel.org/stable/c/05d3fd599594abf79aad4484bccb2b26e1cb0b51 - Patch
References () https://git.kernel.org/stable/c/2fd5ad3f310de22836cdacae919dd99d758a1f1b - () https://git.kernel.org/stable/c/2fd5ad3f310de22836cdacae919dd99d758a1f1b - Patch
References () https://git.kernel.org/stable/c/3d7a63352a93bdb8a1cdf29606bf617d3ac1c22a - () https://git.kernel.org/stable/c/3d7a63352a93bdb8a1cdf29606bf617d3ac1c22a - Patch
References () https://git.kernel.org/stable/c/67fad724f1b568b356c1065d50df46e6b30eb2f7 - () https://git.kernel.org/stable/c/67fad724f1b568b356c1065d50df46e6b30eb2f7 - Patch
References () https://git.kernel.org/stable/c/70882d7fa74f0731492a0d493e8515a4f7131831 - () https://git.kernel.org/stable/c/70882d7fa74f0731492a0d493e8515a4f7131831 - Patch
First Time Linux linux Kernel
Linux
CWE CWE-401
CPE cpe:2.3:o:linux:linux_kernel:6.1:rc8:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.1:-:*:*:*:*:*:*

21 Aug 2024, 01:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-08-21 01:15

Updated : 2025-09-26 18:36


NVD link : CVE-2024-43870

Mitre link : CVE-2024-43870

CVE.ORG link : CVE-2024-43870


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-401

Missing Release of Memory after Effective Lifetime