CVE-2026-99093 in Linux
Resumen
por VulDB • 2026-10-26
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
mm: no programar la liberación diferida de las tablas de páginas del kernel durante el arranque
Arrancar con un trazador (tracer) en tiempo de inicio y un filtro, por ejemplo
ftrace=function ftrace_filter=pud_free_pmd_page
provoca un fallo crítico (panic) en 7.3-rc4 tan pronto como comienza el trazador:
[ 23.531178] Starting tracer 'function'
[ 23.675800] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000038: 0000 [#1] SMP KASAN NOPTI
[ 23.819917] KASAN: null-ptr-deref in range [0x00000000000001c0-0x00000000000001c7]
[ 23.964025] CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 7.3.0-rc4-fe2ec83746e5-with-fixes-v2+ #195 PREEMPT(undef)
[ 24.252248] RIP: 0010:__queue_work+0xab/0xf00
[ 25.981629] Call Trace:
[ 26.125727]
[ 26.413912] ? pagetable_free_kernel+0x20/0x120
[ 26.990283] queue_work_on+0x97/0xf0
[ 27.134382] __cpa_collapse_large_pages+0x501/0x6f0
[ 27.566662] cpa_flush+0x394/0x620
[ 27.998953] change_page_attr_set_clr+0x321/0x4a0
[ 29.151729] set_memory_rox+0xa2/0xf0
[ 29.584018] create_trampoline+0x431/0x6f0
... [ 44.343347] Kernel panic - not syncing: Attempted to kill the idle task!
El trazador en tiempo de inicio se inicia desde early_trace_init(), que se ejecuta antes de workqueue_init_early(). Hacer que su trampolín sea de solo lectura divide una página grande, y CPA (Change Page Attribute) la colapsa nuevamente inmediatamente. La tabla dividida ha sido una tabla de páginas del kernel desde el commit 9e4a3ec3411b ("x86/mm/pat: Allocate split page tables as kernel page tables"), por lo que el colapso la libera a través de pagetable_free_kernel(), lo cual encola trabajo en system_percpu_wq, que aún es NULL en ese momento. Este commit es correcto en sí mismo; solo permite que CPA llegue a pagetable_free_kernel() antes de que exista la cola de trabajos (workqueue) en la que dicha función depende.
Continuar colocando la tabla en la lista, pero no programar el trabajo mientras el sistema sigue arrancando. Un core_initcall lo programa una vez para liberar todo lo que se haya colado hasta ese momento.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.