CVE-2024-58090 (GCVE-0-2024-58090)
Vulnerability from cvelistv5
Published
2025-03-27 14:57
Modified
2025-05-04 10:09
Severity ?
VLAI Severity ?
EPSS score ?
Summary
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().
References
Impacted products
Vendor | Product | Version | ||
---|---|---|---|---|
► | Linux | Linux |
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 |
|
{ "containers": { "cna": { "affected": [ { "defaultStatus": "unaffected", "product": "Linux", "programFiles": [ "kernel/sched/core.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "lessThan": "321794b75ac968f0bb6b9c913581949452a8d992", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "1651f5731b378616565534eb9cda30e258cebebc", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "288fdb8dcb71ec77b76ab8b8a06bc10f595ea504", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "84586322e010164eedddfcd0a0894206ae7d9317", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "68786ab0935ccd5721283b7eb7f4d2f2942c7a52", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "0362847c520747b44b574d363705d8af0621727a", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "b927c8539f692fb1f9c2f42e6c8ea2d94956f921", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" }, { "lessThan": "82c387ef7568c0d96a918a5a78d9cad6256cfa15", "status": "affected", "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "versionType": "git" } ] }, { "defaultStatus": "affected", "product": "Linux", "programFiles": [ "kernel/sched/core.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "lessThanOrEqual": "5.4.*", "status": "unaffected", "version": "5.4.291", "versionType": "semver" }, { "lessThanOrEqual": "5.10.*", "status": "unaffected", "version": "5.10.235", "versionType": "semver" }, { "lessThanOrEqual": "5.15.*", "status": "unaffected", "version": "5.15.179", "versionType": "semver" }, { "lessThanOrEqual": "6.1.*", "status": "unaffected", "version": "6.1.130", "versionType": "semver" }, { "lessThanOrEqual": "6.6.*", "status": "unaffected", "version": "6.6.81", "versionType": "semver" }, { "lessThanOrEqual": "6.12.*", "status": "unaffected", "version": "6.12.18", "versionType": "semver" }, { "lessThanOrEqual": "6.13.*", "status": "unaffected", "version": "6.13.6", "versionType": "semver" }, { "lessThanOrEqual": "*", "status": "unaffected", "version": "6.14", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "cpeMatch": [ { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "5.4.291", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "5.10.235", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "5.15.179", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.1.130", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.6.81", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.12.18", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.13.6", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.14", "vulnerable": true } ], "negate": false, "operator": "OR" } ] } ], "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsched/core: Prevent rescheduling when interrupts are disabled\n\nDavid reported a warning observed while loop testing kexec jump:\n\n Interrupts enabled after irqrouter_resume+0x0/0x50\n WARNING: CPU: 0 PID: 560 at drivers/base/syscore.c:103 syscore_resume+0x18a/0x220\n kernel_kexec+0xf6/0x180\n __do_sys_reboot+0x206/0x250\n do_syscall_64+0x95/0x180\n\nThe corresponding interrupt flag trace:\n\n hardirqs last enabled at (15573): [\u003cffffffffa8281b8e\u003e] __up_console_sem+0x7e/0x90\n hardirqs last disabled at (15580): [\u003cffffffffa8281b73\u003e] __up_console_sem+0x63/0x90\n\nThat means __up_console_sem() was invoked with interrupts enabled. Further\ninstrumentation revealed that in the interrupt disabled section of kexec\njump one of the syscore_suspend() callbacks woke up a task, which set the\nNEED_RESCHED flag. A later callback in the resume path invoked\ncond_resched() which in turn led to the invocation of the scheduler:\n\n __cond_resched+0x21/0x60\n down_timeout+0x18/0x60\n acpi_os_wait_semaphore+0x4c/0x80\n acpi_ut_acquire_mutex+0x3d/0x100\n acpi_ns_get_node+0x27/0x60\n acpi_ns_evaluate+0x1cb/0x2d0\n acpi_rs_set_srs_method_data+0x156/0x190\n acpi_pci_link_set+0x11c/0x290\n irqrouter_resume+0x54/0x60\n syscore_resume+0x6a/0x200\n kernel_kexec+0x145/0x1c0\n __do_sys_reboot+0xeb/0x240\n do_syscall_64+0x95/0x180\n\nThis is a long standing problem, which probably got more visible with\nthe recent printk changes. Something does a task wakeup and the\nscheduler sets the NEED_RESCHED flag. cond_resched() sees it set and\ninvokes schedule() from a completely bogus context. The scheduler\nenables interrupts after context switching, which causes the above\nwarning at the end.\n\nQuite some of the code paths in syscore_suspend()/resume() can result in\ntriggering a wakeup with the exactly same consequences. They might not\nhave done so yet, but as they share a lot of code with normal operations\nit\u0027s just a question of time.\n\nThe problem only affects the PREEMPT_NONE and PREEMPT_VOLUNTARY scheduling\nmodels. Full preemption is not affected as cond_resched() is disabled and\nthe preemption check preemptible() takes the interrupt disabled flag into\naccount.\n\nCure the problem by adding a corresponding check into cond_resched()." } ], "providerMetadata": { "dateUpdated": "2025-05-04T10:09:51.138Z", "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux" }, "references": [ { "url": "https://git.kernel.org/stable/c/321794b75ac968f0bb6b9c913581949452a8d992" }, { "url": "https://git.kernel.org/stable/c/1651f5731b378616565534eb9cda30e258cebebc" }, { "url": "https://git.kernel.org/stable/c/288fdb8dcb71ec77b76ab8b8a06bc10f595ea504" }, { "url": "https://git.kernel.org/stable/c/84586322e010164eedddfcd0a0894206ae7d9317" }, { "url": "https://git.kernel.org/stable/c/68786ab0935ccd5721283b7eb7f4d2f2942c7a52" }, { "url": "https://git.kernel.org/stable/c/0362847c520747b44b574d363705d8af0621727a" }, { "url": "https://git.kernel.org/stable/c/b927c8539f692fb1f9c2f42e6c8ea2d94956f921" }, { "url": "https://git.kernel.org/stable/c/82c387ef7568c0d96a918a5a78d9cad6256cfa15" } ], "title": "sched/core: Prevent rescheduling when interrupts are disabled", "x_generator": { "engine": "bippy-1.2.0" } } }, "cveMetadata": { "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "assignerShortName": "Linux", "cveId": "CVE-2024-58090", "datePublished": "2025-03-27T14:57:02.886Z", "dateReserved": "2025-03-06T15:52:09.188Z", "dateUpdated": "2025-05-04T10:09:51.138Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1", "vulnerability-lookup:meta": { "nvd": "{\"cve\":{\"id\":\"CVE-2024-58090\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-03-27T15:15:54.123\",\"lastModified\":\"2025-03-27T16:45:12.210\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nsched/core: Prevent rescheduling when interrupts are disabled\\n\\nDavid reported a warning observed while loop testing kexec jump:\\n\\n Interrupts enabled after irqrouter_resume+0x0/0x50\\n WARNING: CPU: 0 PID: 560 at drivers/base/syscore.c:103 syscore_resume+0x18a/0x220\\n kernel_kexec+0xf6/0x180\\n __do_sys_reboot+0x206/0x250\\n do_syscall_64+0x95/0x180\\n\\nThe corresponding interrupt flag trace:\\n\\n hardirqs last enabled at (15573): [\u003cffffffffa8281b8e\u003e] __up_console_sem+0x7e/0x90\\n hardirqs last disabled at (15580): [\u003cffffffffa8281b73\u003e] __up_console_sem+0x63/0x90\\n\\nThat means __up_console_sem() was invoked with interrupts enabled. Further\\ninstrumentation revealed that in the interrupt disabled section of kexec\\njump one of the syscore_suspend() callbacks woke up a task, which set the\\nNEED_RESCHED flag. A later callback in the resume path invoked\\ncond_resched() which in turn led to the invocation of the scheduler:\\n\\n __cond_resched+0x21/0x60\\n down_timeout+0x18/0x60\\n acpi_os_wait_semaphore+0x4c/0x80\\n acpi_ut_acquire_mutex+0x3d/0x100\\n acpi_ns_get_node+0x27/0x60\\n acpi_ns_evaluate+0x1cb/0x2d0\\n acpi_rs_set_srs_method_data+0x156/0x190\\n acpi_pci_link_set+0x11c/0x290\\n irqrouter_resume+0x54/0x60\\n syscore_resume+0x6a/0x200\\n kernel_kexec+0x145/0x1c0\\n __do_sys_reboot+0xeb/0x240\\n do_syscall_64+0x95/0x180\\n\\nThis is a long standing problem, which probably got more visible with\\nthe recent printk changes. Something does a task wakeup and the\\nscheduler sets the NEED_RESCHED flag. cond_resched() sees it set and\\ninvokes schedule() from a completely bogus context. The scheduler\\nenables interrupts after context switching, which causes the above\\nwarning at the end.\\n\\nQuite some of the code paths in syscore_suspend()/resume() can result in\\ntriggering a wakeup with the exactly same consequences. They might not\\nhave done so yet, but as they share a lot of code with normal operations\\nit\u0027s just a question of time.\\n\\nThe problem only affects the PREEMPT_NONE and PREEMPT_VOLUNTARY scheduling\\nmodels. Full preemption is not affected as cond_resched() is disabled and\\nthe preemption check preemptible() takes the interrupt disabled flag into\\naccount.\\n\\nCure the problem by adding a corresponding check into cond_resched().\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: sched/core: Evitar la reprogramaci\u00f3n cuando las interrupciones est\u00e1n deshabilitadas David inform\u00f3 una advertencia observada durante la prueba del bucle kexec jump: Interrupciones habilitadas despu\u00e9s 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\u00f3n correspondiente: hardirqs se habilit\u00f3 por \u00faltima vez en (15573): [] __up_console_sem+0x7e/0x90 hardirqs se desactiv\u00f3 por \u00faltima vez en (15580): [] __up_console_sem+0x63/0x90. Esto significa que __up_console_sem() se invoc\u00f3 con las interrupciones habilitadas. Una instrumentaci\u00f3n m\u00e1s detallada revel\u00f3 que, en la secci\u00f3n de interrupci\u00f3n deshabilitada de kexec jump, una de las devoluciones de llamada syscore_suspend() despert\u00f3 una tarea, lo que activ\u00f3 el indicador NEED_RESCHED. Una devoluci\u00f3n de llamada posterior en la ruta de reanudaci\u00f3n invoc\u00f3 cond_resched(), que a su vez condujo a la invocaci\u00f3n 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\u00e1s visible con los cambios recientes de printk. Algo hace una activaci\u00f3n 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\u00e9s del cambio de contexto, lo que causa la advertencia anterior al final. Algunas de las rutas de c\u00f3digo en syscore_suspend()/resume() pueden provocar la activaci\u00f3n de una activaci\u00f3n con exactamente las mismas consecuencias. Puede que no lo hayan hecho todav\u00eda, pero como comparten mucho c\u00f3digo con las operaciones normales, es solo cuesti\u00f3n de tiempo. El problema solo afecta a los modelos de programaci\u00f3n PREEMPT_NONE y PREEMPT_VOLUNTARY. La preempci\u00f3n completa no se ve afectada, ya que cond_resched() est\u00e1 deshabilitado y la comprobaci\u00f3n de preempci\u00f3n preemptible() tiene en cuenta la bandera de interrupci\u00f3n deshabilitada. Solucione el problema a\u00f1adiendo una comprobaci\u00f3n correspondiente a cond_resched().\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/0362847c520747b44b574d363705d8af0621727a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/1651f5731b378616565534eb9cda30e258cebebc\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/288fdb8dcb71ec77b76ab8b8a06bc10f595ea504\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/321794b75ac968f0bb6b9c913581949452a8d992\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/68786ab0935ccd5721283b7eb7f4d2f2942c7a52\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/82c387ef7568c0d96a918a5a78d9cad6256cfa15\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/84586322e010164eedddfcd0a0894206ae7d9317\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b927c8539f692fb1f9c2f42e6c8ea2d94956f921\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}" } }
Loading…
Loading…
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…