CVE-2026-93066 in Linuxinformation

Résumé

par VulDB • 18/09/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

x86/mm/pat : Prendre cpa_lock autour de l'effondrement des grandes pages (large-page collapse)

Le chargement et le déchargement simultanés de modules sur plusieurs CPU dans une compilation KASAN, avec un délai court injecté lors de la recherche dans les tables de page CPA pour élargir la fenêtre d'exposition, provoquent des défauts en quelques minutes :

BUG: KASAN: use-after-free in __change_page_attr+0x7cc/0x7e0 Write of size 8 at addr ffff888181139718 by task modprobe ... The buggy address belongs to the physical page: pfn:0x181139 ... page_type: f2(table)

cpa_collapse_large_pages() reconstruit un PMD feuille à partir de ses PTEs 4K et libère les anciennes pages de table PTE, tandis que __change_page_attr() récupère un pointeur PTE via une lookup_address_in_pgd_attr() sans verrou (lockless) et l'écrit avec set_pte_atomic() plus tard. Lorsque le texte du module est servi depuis une mappage ROX partagé en lecture seule, les deux opérations s'exécutent sur le même PMD :

CPU A (chargement de module) CPU B (finalisation de module) ------------------- ----------------------- execmem_make_temp_rw set_memory_nx __change_page_attr split 2M -> 4K table P kpte = &P[i] (lockless)
execmem_restore_rox set_memory_rox (CPA_COLLAPSE) cpa_collapse_large_pages rebuild leaf PMD flush_tlb_all pagetable_free(P) set_pte_atomic(kpte, ...) -> writes into freed P

P est une page de table de pages (page_type: table), réutilisée immédiatement ; l'écriture corrompt donc tout ce qui obtient la page ensuite : un mauvais-pte ou bad-page splat, ou un défaut fatal une fois que P a été transformé en texte en lecture seule.

Le flush_tlb_all() avant la libération ne ferme pas cette faille : son IPI (Inter-Processor Interrupt) sérialise uniquement les parcours de tables de pages qui s'exécutent avec les interruptions désactivées (par exemple GUP-fast) ; le parcours dans __change_page_attr() s'exécute avec les interruptions activées, rien ne l'empêche donc de détenir un pointeur obsolète vers P.

Sérialiser l'effondrement - la reconstruction du PMD, le flush TLB et la libération des tables PTE - sous cpa_lock, le même verrou que __change_page_attr() prend désormais inconditionnellement depuis le commit ("x86/mm/pat: stop gating cpa_lock on debug_pagealloc_enabled()"), afin qu'un parcours concurrent ne puisse plus détenir un pointeur vers une table sur laquelle l'effondrement s'apprête à libérer.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsable

Linux

Réserver

17/09/2026

Divulgation

17/09/2026

Modérer

accepté

Entrée

VDB-407177

CPE

prêt

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!