Vulnerabilidad en kernel de Linux (CVE-2024-35991)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
20/05/2024
Última modificación:
24/09/2025
Descripción
En el kernel de Linux, se resolvió la siguiente vulnerabilidad: dmaengine: idxd: convertir spinlock a mutex para bloquear evl workqueue. Drain_workqueue() no se puede llamar de forma segura en un contexto de spinlock debido a una posible reprogramación de tareas. En el escenario de tareas múltiples, llamar a queue_work() mientras Drain_workqueue() generará un seguimiento de llamadas, ya que no se permite enviar un trabajo a una cola de trabajo agotadora en un contexto de bloqueo por giro. Seguimiento de llamadas: ? __warn+0x7d/0x140 ? __queue_work+0x2b2/0x440? report_bug+0x1f8/0x200? handle_bug+0x3c/0x70? exc_invalid_op+0x18/0x70? asm_exc_invalid_op+0x1a/0x20? __queue_work+0x2b2/0x440 queue_work_on+0x28/0x30 idxd_misc_thread+0x303/0x5a0 [idxd] ? __schedule+0x369/0xb40? __pfx_irq_thread_fn+0x10/0x10 ? irq_thread+0xbc/0x1b0 irq_thread_fn+0x21/0x70 irq_thread+0x102/0x1b0 ? preempt_count_add+0x74/0xa0? __pfx_irq_thread_dtor+0x10/0x10 ? __pfx_irq_thread+0x10/0x10 kthread+0x103/0x140 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x31/0x50 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1b/0x30 La implementación actual utiliza un bloqueo giratorio para proteger la cola de trabajo del registro de eventos y conducirá al seguimiento de llamadas debido a una posible reprogramación de tareas. Para solucionar el problema de bloqueo, convierta el spinlock a mutex, lo que permite llamar a Drain_workqueue() en un contexto seguro con bloqueo mutex. Este cambio garantiza una sincronización adecuada al acceder a la cola de trabajo del registro de eventos, lo que evita un posible seguimiento de llamadas y mejora la solidez general del código.
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.4 (incluyendo) | 6.6.30 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.8.9 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc5:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/758071a35d9f3ffd84ff12169d081412a2f5f098
- https://git.kernel.org/stable/c/c9b732a9f73eadc638abdcf0a6d39bc7a0c1af5f
- https://git.kernel.org/stable/c/d5638de827cff0fce77007e426ec0ffdedf68a44
- https://git.kernel.org/stable/c/758071a35d9f3ffd84ff12169d081412a2f5f098
- https://git.kernel.org/stable/c/c9b732a9f73eadc638abdcf0a6d39bc7a0c1af5f
- https://git.kernel.org/stable/c/d5638de827cff0fce77007e426ec0ffdedf68a44