CVE-2024-58090

In the Linux kernel, the following vulnerability has been resolved: sched/core: Prevent rescheduling when interrupts are disabled David reported a warning observed while loop testing kexec jump: Interrupts enabled after irqrouter_resume+0x0/0x50 WARNING: CPU: 0 PID: 560 at drivers/base/syscore.c:103 syscore_resume+0x18a/0x220 kernel_kexec+0xf6/0x180 __do_sys_reboot+0x206/0x250 do_syscall_64+0x95/0x180 The corresponding interrupt flag trace: hardirqs last enabled at (15573): [<ffffffffa8281b8e>] __up_console_sem+0x7e/0x90 hardirqs last disabled at (15580): [<ffffffffa8281b73>] __up_console_sem+0x63/0x90 That means __up_console_sem() was invoked with interrupts enabled. Further instrumentation revealed that in the interrupt disabled section of kexec jump one of the syscore_suspend() callbacks woke up a task, which set the NEED_RESCHED flag. A later callback in the resume path invoked cond_resched() which in turn led to the invocation of the scheduler: __cond_resched+0x21/0x60 down_timeout+0x18/0x60 acpi_os_wait_semaphore+0x4c/0x80 acpi_ut_acquire_mutex+0x3d/0x100 acpi_ns_get_node+0x27/0x60 acpi_ns_evaluate+0x1cb/0x2d0 acpi_rs_set_srs_method_data+0x156/0x190 acpi_pci_link_set+0x11c/0x290 irqrouter_resume+0x54/0x60 syscore_resume+0x6a/0x200 kernel_kexec+0x145/0x1c0 __do_sys_reboot+0xeb/0x240 do_syscall_64+0x95/0x180 This is a long standing problem, which probably got more visible with the recent printk changes. Something does a task wakeup and the scheduler sets the NEED_RESCHED flag. cond_resched() sees it set and invokes schedule() from a completely bogus context. The scheduler enables interrupts after context switching, which causes the above warning at the end. Quite some of the code paths in syscore_suspend()/resume() can result in triggering a wakeup with the exactly same consequences. They might not have done so yet, but as they share a lot of code with normal operations it's just a question of time. The problem only affects the PREEMPT_NONE and PREEMPT_VOLUNTARY scheduling models. Full preemption is not affected as cond_resched() is disabled and the preemption check preemptible() takes the interrupt disabled flag into account. Cure the problem by adding a corresponding check into cond_resched().
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:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc4:*:*:*:*:*:*

History

31 Oct 2025, 16:22

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: sched/core: Evitar la reprogramación cuando las interrupciones están deshabilitadas David informó una advertencia observada durante la prueba del bucle kexec jump: Interrupciones habilitadas después de irqrouter_resume+0x0/0x50 ADVERTENCIA: CPU: 0 PID: 560 en drivers/base/syscore.c:103 syscore_resume+0x18a/0x220 kernel_kexec+0xf6/0x180 __do_sys_reboot+0x206/0x250 do_syscall_64+0x95/0x180 El seguimiento del indicador de interrupción correspondiente: hardirqs se habilitó por última vez en (15573): [] __up_console_sem+0x7e/0x90 hardirqs se desactivó por última vez en (15580): [] __up_console_sem+0x63/0x90. Esto significa que __up_console_sem() se invocó con las interrupciones habilitadas. Una instrumentación más detallada reveló que, en la sección de interrupción deshabilitada de kexec jump, una de las devoluciones de llamada syscore_suspend() despertó una tarea, lo que activó el indicador NEED_RESCHED. Una devolución de llamada posterior en la ruta de reanudación invocó cond_resched(), que a su vez condujo a la invocación del programador: __cond_resched+0x21/0x60 down_timeout+0x18/0x60 acpi_os_wait_semaphore+0x4c/0x80 acpi_ut_acquire_mutex+0x3d/0x100 acpi_ns_get_node+0x27/0x60 acpi_ns_evaluate+0x1cb/0x2d0 acpi_rs_set_srs_method_data+0x156/0x190 acpi_pci_link_set+0x11c/0x290 irqrouter_resume+0x54/0x60 syscore_resume+0x6a/0x200 kernel_kexec+0x145/0x1c0 __do_sys_reboot+0xeb/0x240 do_syscall_64+0x95/0x180 Este es un problema de larga data, que probablemente se hizo más visible con los cambios recientes de printk. Algo hace una activación de tarea y el programador establece el indicador NEED_RESCHED. cond_resched() lo ve establecido e invoca schedule() desde un contexto completamente falso. El programador habilita interrupciones después del cambio de contexto, lo que causa la advertencia anterior al final. Algunas de las rutas de código en syscore_suspend()/resume() pueden provocar la activación de una activación con exactamente las mismas consecuencias. Puede que no lo hayan hecho todavía, pero como comparten mucho código con las operaciones normales, es solo cuestión de tiempo. El problema solo afecta a los modelos de programación PREEMPT_NONE y PREEMPT_VOLUNTARY. La preempción completa no se ve afectada, ya que cond_resched() está deshabilitado y la comprobación de preempción preemptible() tiene en cuenta la bandera de interrupción deshabilitada. Solucione el problema añadiendo una comprobación correspondiente a cond_resched().
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
CWE NVD-CWE-noinfo
CPE cpe:2.3:o:linux:linux_kernel:6.14:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
References () https://git.kernel.org/stable/c/0362847c520747b44b574d363705d8af0621727a - () https://git.kernel.org/stable/c/0362847c520747b44b574d363705d8af0621727a - Patch
References () https://git.kernel.org/stable/c/1651f5731b378616565534eb9cda30e258cebebc - () https://git.kernel.org/stable/c/1651f5731b378616565534eb9cda30e258cebebc - Patch
References () https://git.kernel.org/stable/c/288fdb8dcb71ec77b76ab8b8a06bc10f595ea504 - () https://git.kernel.org/stable/c/288fdb8dcb71ec77b76ab8b8a06bc10f595ea504 - Patch
References () https://git.kernel.org/stable/c/321794b75ac968f0bb6b9c913581949452a8d992 - () https://git.kernel.org/stable/c/321794b75ac968f0bb6b9c913581949452a8d992 - Patch
References () https://git.kernel.org/stable/c/68786ab0935ccd5721283b7eb7f4d2f2942c7a52 - () https://git.kernel.org/stable/c/68786ab0935ccd5721283b7eb7f4d2f2942c7a52 - Patch
References () https://git.kernel.org/stable/c/82c387ef7568c0d96a918a5a78d9cad6256cfa15 - () https://git.kernel.org/stable/c/82c387ef7568c0d96a918a5a78d9cad6256cfa15 - Patch
References () https://git.kernel.org/stable/c/84586322e010164eedddfcd0a0894206ae7d9317 - () https://git.kernel.org/stable/c/84586322e010164eedddfcd0a0894206ae7d9317 - Patch
References () https://git.kernel.org/stable/c/b927c8539f692fb1f9c2f42e6c8ea2d94956f921 - () https://git.kernel.org/stable/c/b927c8539f692fb1f9c2f42e6c8ea2d94956f921 - Patch
First Time Linux linux Kernel
Linux

27 Mar 2025, 15:15

Type Values Removed Values Added
New CVE

Information

Published : 2025-03-27 15:15

Updated : 2025-10-31 16:22


NVD link : CVE-2024-58090

Mitre link : CVE-2024-58090

CVE.ORG link : CVE-2024-58090


JSON object : View

Products Affected

linux

  • linux_kernel