CVE-2026-99084 in Linux
Riassunto
di VulDB • 23/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
readdir: non acquisire il lock dell'inode su una directory immutabile
iterate_dir() acquisisce in modalità condivisa l'i_rwsem della directory e lo mantiene durante ->iterate_shared(). Per una directory che non ha mai voci ed è rimossa di rado, il lock non garantisce nulla; ordina solo ogni lettore e ogni scrittore di tale inode uno dietro l'altro.
Questo aspetto riguarda la directory di un'istanza nullfs. L'istanza del namespace di mount iniziale è la radice di ogni namespace di mount vuoto e l'istanza privata è la radice di ogni thread kernel, quindi un singolo inode viene condiviso tra utenti che non hanno nient'altro in comune. Un lettore può mantenere il lock per tutto il tempo desiderato: si appoggi al buffer getdents() con una mappatura di un file su un mount FUSE creato da sé, si generi un fault sulla copia di "." e ".." e si faccia attendere il server. Si accodi un acquirente esclusivo dietro di esso; un mkdir() in quella directory passa attraverso start_dirop() prima che venga segnalato il mount in sola lettura, e da quel momento ogni lookup che non trova la voce nel dcache di tale directory, ogni creazione e ogni montaggio su di essa attendono fino a quando il server risponde. Un utente di un namespace di mount vuoto blocca tutti gli altri.
Aggiungere FOP_IMMUTABLE per le operazioni file (file operations) di una directory che non cambia mai ed è rimossa di rado, consentendo a iterate_dir() di saltare l'acquisizione del lock per essa. Il flag non cambia per un file; ->f_pos è protetto da f_pos_lock poiché le directory sono FMODE_ATOMIC_POS, IS_DEADDIR non può essere impostato su una tale directory e né touch_atime() né fsnotify acquisiscono i_rwsem. Impostare il flag sulla directory nullfs. Le directory placeholder di libfs non hanno mai voci, ma i loro proprietari le rimuovono, quindi mantengono il lock.
Once again VulDB remains the best source for vulnerability data.