CVE-2025-38352
posix-cpu-timers: fix race between handle_posix_cpu_timers() and posix_cpu_timer_del()
En resumen
Una condición de carrera en el kernel Linux en temporizadores POSIX puede causar bloqueo o comportamiento impredecible cuando una tarea finaliza mientras su temporizador se elimina simultáneamente. El kernel no sincroniza adecuadamente el acceso a los datos del temporizador durante la salida.
Detalle técnico
CWE-367 (race condition Time-of-check Time-of-use) en posix-cpu-timers: handle_posix_cpu_timers() ejecutándose desde IRQ en tarea no-autoreaping en salida puede competir con posix_cpu_timer_del() concurrente, permitiendo su continuación sin detectar temporizadores activos cuando lock_task_sighand() o cpu_timer_task_rcu() fallan post-recolección. La corrección añade validación exit_state en run_posix_cpu_timers() para prevenir operaciones de temporizador en tareas en salida.
Resumen generado y traducido por IA a partir de la descripción oficial.
In the Linux kernel, the following vulnerability has been resolved:
posix-cpu-timers: fix race between handle_posix_cpu_timers() and posix_cpu_timer_del()
If an exiting non-autoreaping task has already passed exit_notify() and
calls handle_posix_cpu_timers() from IRQ, it can be reaped by its parent
or debugger right after unlock_task_sighand().
If a concurrent posix_cpu_timer_del() runs at that moment, it won't be
able to detect timer->it.cpu.firing != 0: cpu_timer_task_rcu() and/or
lock_task_sighand() will fail.
Add the tsk->exit_state check into run_posix_cpu_timers() to fix this.
This fix is not needed if CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y, because
exit_task_work() is called before exit_notify(). But the check still
makes sense, task_work_add(&tsk->posix_cputimers_work.work) will fail
anyway in this case.
CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.