Vulnerabilidad en kernel de Linux (CVE-2025-21983)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
01/04/2025
Última modificación:
01/04/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: mm/slab/kvfree_rcu: Cambiar a WQ_MEM_RECLAIM wq Actualmente, las API kvfree_rcu() utilizan una cola de trabajo del sistema que es "system_unbound_wq" para controlar la maquinaria RCU para recuperar una memoria. Recientemente, se ha observado la siguiente advertencia del kernel: workqueue: WQ_MEM_RECLAIM nvme-wq:nvme_scan_work is flushing !WQ_MEM_RECLAIM events_unbound:kfree_rcu_work ADVERTENCIA: CPU: 21 PID: 330 en kernel/workqueue.c:3719 check_flush_dependency+0x112/0x120 Módulos vinculados: intel_uncore_frequency(E) intel_uncore_frequency_common(E) skx_edac(E) ... CPU: 21 UID: 0 PID: 330 Comm: kworker/u144:6 Tainted: GE 6.13.2-0_g925d379822da #1 Nombre del hardware: Wiwynn Twin Lakes MP/Twin Lakes Passive MP, BIOS YMM20 01/02/2023 Cola de trabajo: nvme-wq nvme_scan_work RIP: 0010:check_flush_dependency+0x112/0x120 Código: 05 9a 40 14 02 01 48 81 c6 c0 00 00 00 48 8b 50 18 48 81 c7 c0 00 00 00 48 89 f9 48 ... RSP: 0018:ffffc90000df7bd8 EFLAGS: 00010082 RAX: 000000000000006a RBX: ffffffff81622390 RCX: 0000000000000027 RDX: 00000000fffeffff RSI: 000000000057ffa8 RDI: ffff88907f960c88 RBP: 0000000000000000 R08: ffffffff83068e50 R09: 000000000002fffd R10: 0000000000000004 R11: 0000000000000000 R12: ffff8881001a4400 R13: 0000000000000000 R14: ffff88907f420fb8 R15: 000000000000000 FS: 0000000000000000(0000) GS:ffff88907f940000(0000) knlGS:0000000000000000 CR2: 00007f60c3001000 CR3: 000000107d010005 CR4: 00000000007726f0 PKRU: 55555554 Seguimiento de llamadas: ? __warn+0xa4/0x140 ? check_flush_dependency+0x112/0x120 ? report_bug+0xe1/0x140 ? check_flush_dependency+0x112/0x120 ? handle_bug+0x5e/0x90 ? exc_invalid_op+0x16/0x40 ? asm_exc_invalid_op+0x16/0x20 ? temporizador_recalc_próxima_expiración+0x190/0x190 ? comprobación_vaciado_dependencia+0x112/0x120 ? check_flush_dependency+0x112/0x120 __flush_work.llvm.1643880146586177030+0x174/0x2c0 flush_rcu_work+0x28/0x30 kvfree_rcu_barrier+0x12f/0x160 kmem_cache_destroy+0x18/0x120 bioset_exit+0x10c/0x150 disk_release.llvm.6740012984264378178+0x61/0xd0 device_release+0x4f/0x90 kobject_put+0x95/0x180 nvme_put_ns+0x23/0xc0 nvme_remove_invalid_namespaces+0xb3/0xd0 nvme_scan_work+0x342/0x490 process_scheduled_works+0x1a2/0x370 work_thread+0x2ff/0x390 ? pwq_release_workfn+0x1e0/0x1e0 kthread+0xb1/0xe0 ? __kthread_parkme+0x70/0x70 ret_from_fork+0x30/0x40 ? __kthread_parkme+0x70/0x70 ret_from_fork_asm+0x11/0x20 ---[ end trace 0000000000000000 ]--- Para solucionar esto, se cambia al uso de la cola de trabajo independiente WQ_MEM_RECLAIM, de modo que no se violen las reglas desde la perspectiva del marco de trabajo de la cola de trabajo. Además, dado que kvfree_rcu() recupera memoria, conviene usar el tipo de cola de trabajo WQ_MEM_RECLAIM, ya que está diseñado para este propósito.