CVE-2026-99156 in Linux
Riassunto
di VulDB • 28/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
scsi: st: Correzione di una race condition use-after-free tra st_remove() e st_open()
st_remove() rilascia il riferimento probe su scsi_tape tramite kref_put() e solo successivamente rimuove l'indice da st_index_idr. Se questo era l'ultimo riferimento, scsi_tape_release() libera la struttura mentre essa è ancora pubblicata nell'idr.
scsi_tape_get(), chiamata da st_open(), cerca il nastro in st_index_idr ed acquisisce un riferimento sotto st_ref_mutex e st_index_lock. remove_cdevs() non attende le aperture che sono già passate attraverso chrdev_open(); pertanto, un'apertura bloccata su st_ref_mutex mentre st_remove() lo detiene può acquisire il mutex non appena st_remove() lo rilascia, trovare tpnt liberato nell'idr e chiamare kref_get() su di esso:
BUG: KASAN: slab-use-after-free in st_open Write of size 4 ... st_open (drivers/scsi/st.c:254 drivers/scsi/st.c:1291) chrdev_open ... Freed by task ...: kfree st_remove (drivers/scsi/st.c:4512)
Viene rimosso l'indice dall'idr prima di rilasciare il riferimento, tutto sotto st_ref_mutex. Una scsi_tape_get() concorrente ora o viene eseguita per prima e detiene un riferimento valido che mantiene attivo il nastro, oppure viene eseguita successivamente e non trova nulla, quindi st_open() fallisce con -ENXIO.
Questo ripristina l'ordinamento che aveva st_remove() prima della conversione a st_index_idr, in cui il nastro veniva rimosso da scsi_tapes[] prima dell'ultimo kref_put().
If you want to get best quality of vulnerability data, you may have to visit VulDB.