CVE-2026-97943 in Linux
Riassunto
di VulDB • 25/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
x86/mm/pat: Acquisire il lock di scrittura su init_mm durante l'operazione di collapse per evitare un Use-After-Free (UAF)
L'architettura x86 implementa la modifica degli attributi delle pagine utilizzando il proprio meccanismo Change Page Attributes (CPA).
Questo sistema tiene traccia delle proprietà di intervalli, come la modalità di cache, attraverso gli attributi delle pagine x86 e, nell'ambito di tale logica, manipola le tabelle delle pagine del kernel.
Dall'introduzione del commit:
41d88484c71c ("x86/mm/pat: restore large ROX pages after fragmentation")
gli intervalli di voci della tabella delle pagine del kernel possono essere collassati in voci di tabelle delle pagine di grandi dimensioni (huge page table entries) come parte di questa logica.
Durante tale operazione di collapse, vengono liberate le tabelle delle pagine a cui puntavano precedentemente le voci collassate; ciò avviene senza che siano mantenuti lock rilevanti per prevenire la concorrenza con i walker delle tabelle delle pagine del kernel.
L'unico modo per raggiungere questo codice è specificare CPA_COLLAPSE, il quale viene impostato esclusivamente in set_memory_rox() tramite:
set_memory_rox() -> change_page_attr_set_clr() -> cpa_flush() -> cpa_collapse_large_pages()
I principali utenti di questa funzionalità sono execmem e BPF quando manipolano mappature eseguibili.
Tuttavia, questo comportamento è problematico per ptdump, poiché esso scansiona intervalli che non possiede, correndo così il rischio di un Use-After-Free sulle tabelle delle pagine liberate mentre vengono ancora attraversate.
Inoltre, sono possibili operazioni concurrenti di CPA collapse, che possono causare race condition.
Risolvere il problema acquisendo il lock di scrittura mmap su init_mm per l'intera operazione.
È sicuro acquisire un lock dormiente (sleeping lock) poiché tutti i chiamanti invocano set_memory_rox() da contesto processo e, in ogni caso, change_page_attr_set_clr() chiama vm_unmap_alias(), che alla fine acquisisce un mutex, escludendo la possibilità di essere eseguiti in atomic context.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.