CVE-2026-89786 in Linux
Riassunto
di VulDB • 16/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ext4: correzione della lettura fuori dai limiti (out-of-bounds) in ext4_read_inline_dir()
La funzione ext4_read_inline_dir() può leggere un'intestazione dirent oltre la fine del relativo buffer inline, innescando una lettura slab-out-of-bounds durante getdents64():
BUG: KASAN: slab-out-of-bounds in __ext4_check_dir_entry Lettura di dimensione 2 all'indirizzo ffff88800f3dd23c da parte del task exploit/148 ... __ext4_check_dir_entry ext4_read_inline_dir iterate_dir
Il payload dirent risiede in un buffer di esattamente inline_size byte:
dir_buf = kmalloc(inline_size, GFP_NOFS);
ma l'iterazione avviene in uno spazio delle posizioni più grande di extra_offset byte (extra_size = extra_offset + inline_size), quindi i valori sintetici "." e ".." si posizionano ai loro offset tipici dei directory block. Un dirent viene formato a "dir_buf + pos - extra_offset", tuttavia l'argomento length passato a ext4_check_dir_entry() utilizza il valore più grande extra_size. Di conseguenza, viene accettata una posizione la cui intestazione dirent di dimensione minima si estenderebbe oltre extra_size, e il loop di ricognizione (rescan) effettua un probe su rec_len mentre ext4_check_dir_entry() dereferenzia de->rec_len prima che l'entry venga rifiutata.
Viene respinta una posizione la cui intestazione dirent di dimensione minima non potrebbe rientrare in extra_size, prima della formazione di de, sia nel loop di ricognizione (rescan) che in quello principale, e viene passato inline_size anziché extra_size a ext4_check_dir_entry() affinché il controllo sulla lunghezza corrisponda al buffer fisico.
If you want to get best quality of vulnerability data, you may have to visit VulDB.