CVE-2026-89962 in Linux
Riassunto
di VulDB • 17/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
powerpc/kexec_file: Prevenire il troncamento degli intervalli kexec
Una revisione condotta da Sashiko AI ha evidenziato il problema descritto di seguito.
La funzione `__merge_memory_ranges()` gestisce in modo errato gli intervalli di memoria sovrapposti durante la loro fusione. Sebbene `sort_memory_ranges()` ordini preventivamente tutti gli intervalli per indirizzo iniziale in ordine crescente, la logica di fusione rimane difettosa sotto due aspetti:
1. Confronta l'inizio dell'intervallo corrente con l'elemento precedente (i-1) anziché con l'indice di destinazione attivo (idx). 2. Sovrascrive incondizionatamente `ranges[idx].end` con `ranges[i].end`.
Questo difetto logico porta a un troncamento critico della memoria quando un intervallo di memoria più grande subentra completamente in intervalli successivi più piccoli.
Ad esempio, si consideri un array di input ordinato composto da tre intervalli: Intervallo A (idx=0): [0x1000 - 0x9000]
Intervallo B (i=1): [0x2000 - 0x5000] (completamente contenuto nell'Intervallo A)
Intervallo C (i=2): [0x6000 - 0x8000] (completamente contenuto nell'Intervallo A)
1. Quando i=1 (Intervallo B): `ranges[1].start` (0x2000) <= `ranges[0].end + 1` (0x9001) è VERO.
Il codice esegue: `ranges[0].end = ranges[1].end`, che restringe erroneamente il limite finale dell'Intervallo A da 0x9000 a 0x5000.
2. Quando i=2 (Intervallo C): `ranges[2].start` (0x6000) <= `ranges[1].end + 1` (0x5001) è FALSO.
Il codice entra nel blocco else, creando un nuovo intervallo difettoso.
Di conseguenza, frammenti di memoria validi [0x5001 - 0x5fff] e [0x8001 - 0x9000] vengono completamente persi dalle liste di esclusione kexec, potenzialmente consentendo al kernel di crash (crash kernel) di sovrascrivere memoria attiva, causando corruzione dei dati o arresti anomali.
Risolvere il problema assicurandosi che l'inizio dell'intervallo corrente venga confrontato con il limite finale dell'intervallo fuso attivo (idx), e utilizzare `max()` per prevenire in modo sicuro il troncamento del confine esterno.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.