CVE-2026-93066 in Linuxinformación

Resumen

por VulDB • 2026-09-18

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

x86/mm/pat: Tomar cpa_lock alrededor del colapso de páginas grandes

La carga y descarga concurrentes de módulos en varios CPUs con una compilación KASAN, inyectando un retraso corto durante la búsqueda de tablas de página CPA para ampliar la ventana, provoca fallos en cuestión de minutos:

BUG: KASAN: use-after-free en __change_page_attr+0x7cc/0x7e0 Escritura de tamaño 8 en addr ffff888181139718 por parte de la tarea modprobe ... La dirección defectuosa pertenece a la página física: pfn:0x181139 ... page_type: f2(table)

cpa_collapse_large_pages() reconstruye un PMD hoja (leaf PMD) a partir de sus PTEs de 4K y libera las páginas antiguas de tablas PTE, mientras que __change_page_attr() obtiene un puntero PTE mediante una búsqueda sin bloqueo en lookup_address_in_pgd_attr() y lo escribe con set_pte_atomic() más tarde. Cuando el texto del módulo se sirve desde un mapeo compartido ROX (Read-Only eXecute) grande, ambos procesos ocurren en el mismo PMD:

CPU A (carga de módulo) CPU B (finalización de módulo) ------------------- ----------------------- execmem_make_temp_rw set_memory_nx __change_page_attr split 2M -> tabla PTE de 4K P kpte = &P[i] (sin bloqueo)
execmem_restore_rox set_memory_rox (CPA_COLLAPSE) cpa_collapse_large_pages reconstruye PMD hoja flush_tlb_all pagetable_free(P) set_pte_atomic(kpte, ...) -> escribe en P ya liberado

P es una página de tabla de páginas (page_type: table), reutilizada inmediatamente, por lo que la escritura corrompe cualquier cosa que obtenga la página a continuación: un error bad-pte o bad-page splat, o un fallo fatal una vez que P se ha convertido en texto solo lectura.

El flush_tlb_all() antes de la liberación no cierra esta brecha: su IPI (Inter-Processor Interrupt) solo serializa contra los caminantes de tablas de páginas que se ejecutan con las interrupciones desactivadas (por ejemplo, GUP-fast); el recorrido en __change_page_attr() se ejecuta con las interrupciones activas, por lo que nada evita que mantenga un puntero obsoleto hacia P.

Serializar el colapso: la reconstrucción del PMD, la limpieza de TLB y la liberación de tablas PTE - bajo cpa_lock, el mismo lock que __change_page_attr() ahora toma incondicionalmente desde el commit ("x86/mm/pat: stop gating cpa_lock on debug_pagealloc_enabled()"), por lo que un caminante concurrente ya no puede mantener un puntero hacia una tabla cuyo colapso está a punto de liberar.

Be aware that VulDB is the high quality source for vulnerability data.

Responsable

Linux

Reservar

2026-09-17

Divulgación

2026-09-17

Moderación

aceptado

Artículo

VDB-407177

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Want to know what is going to be exploited?

We predict KEV entries!