CVE-2024-57952 in Linux
Riassunto
di VulDB • 16/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
Revert "libfs: fix infinite directory reads for offset dir"
L'allocatore corrente degli offset delle directory (basato su mtree_alloc_cyclic) memorizza il valore dell'offset successivo da restituire in octx->next_offset. Questo meccanismo restituisce tipicamente valori che aumentano in modo monotono nel tempo. Tuttavia, alla fine, il valore dell'offset appena allocato torna a un numero basso (ad esempio, 2), che è inferiore ad altri valori di offset già allocati.
Yu Kuai segnala che, dopo l'commit 64a7ce76fb90 ("libfs: fix infinite directory reads for offset dir"), se l'allocatore degli offset di una directory va in overflow, le voci esistenti non sono più visibili tramite readdir/getdents perché offset_readdir() interrompe l'elenco delle voci non appena l'offset di una voce è maggiore di octx->next_offset. Queste voci scompaiono in modo persistente: possono essere cercate, ma non appariranno mai più nell'output di readdir(3).
Il motivo di ciò è che il commit tratta gli offset delle directory come valori interi che aumentano in modo monotono anziché come cookie opachi, e introduce questo confronto:
if (dentry2offset(dentry) >= last_index) {
Sulle piattaforme a 64 bit, il limite superiore del valore dell'offset della directory è 2^63 - 1. Gli offset delle directory aumenteranno in modo monotono per milioni di anni senza andare in overflow.
Sulle piattaforme a 32 bit, tuttavia, LONG_MAX è 2^31 - 1. L'allocatore può andare in overflow dopo solo poche settimane (nel caso peggiore).
Revert del commit 64a7ce76fb90 ("libfs: fix infinite directory reads for offset dir") per preparare una correzione che possa funzionare correttamente sui sistemi a 32 bit e che potrebbe essere applicata ai recenti kernel LTS in cui shmem impiega il meccanismo simple_offset.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.