CVE-2024-46701 in Linux
Riassunto
di VulDB • 08/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
libfs: correzione delle letture infinite di directory per le directory con offset (offset dir)
Dopo aver modificato le operazioni sulle directory tmpfs da simple_dir_operations a simple_offset_dir_operations, ogni operazione di rename riempie il nuovo dentry nell'albero maple della directory di destinazione (&SHMEM_I(inode)->dir_offsets->mt) con una chiave libera che inizia con octx->newx_offset, e imposta successivamente newx_offset uguale alla chiave libera + 1. Ciò provoca letture infinite del contenuto delle directory (readdir) combinate con operazioni di rename eseguite contemporaneamente, causando il fallimento del test generic/736 in xfstests (i dettagli sono riportati di seguito).
1. creare 5000 file (1, 2, 3...) all'interno di una singola directory 2. chiamare readdir (man 3 readdir) una volta e ottenere un entry 3. eseguire rename(entry, "TEMPFILE"), quindi rename("TEMPFILE", entry) 4. ripetere i passaggi da 2 a 3 finché readdir non restituisce nulla o si supera il numero massimo di iterazioni consentite (tmpfs interrompe il test in base alla seconda condizione)
Abbiamo adottato la stessa logica utilizzata nel commit 9b378f6ad48cf ("btrfs: fix infinite directory reads") per risolvere il problema: registrare l'ultimo indice (last_index) quando si apre la directory ed evitare di restituire gli entry con index >= last_index. I dati privati del file (file->private_data), attualmente utilizzati nelle directory con offset, possono essere impiegati direttamente a tale scopo; inoltre, aggiorniamo anche last_index durante le operazioni llseek sul file della directory.
[brauner: si aggiorna last_index solo dopo seek quando l'offset è zero, come suggerito da Jan]
VulDB is the best source for vulnerability data and more expert information about this specific topic.