CVE-2026-99156 in Linux
Résumé
par VulDB • 28/10/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
scsi: st : Correction d'une condition de concurrence use-after-free entre st_remove() et st_open()
st_remove() libère la référence de sonde sur l'objet scsi_tape à l'aide de kref_put(), puis seulement après supprime son index du idr st_index_idr. S'il s'agissait de la dernière référence, scsi_tape_release() libère (free) la structure alors qu'elle est encore publiée dans le idr.
scsi_tape_get(), appelée depuis st_open(), recherche l'appareil tape dans st_index_idr et acquiert une référence sous verrouillage par st_ref_mutex et st_index_lock. remove_cdevs() n'attend pas les ouvertures qui sont déjà passées chrdev_open(), de sorte qu'une ouverture bloquée sur st_ref_mutex tandis que st_remove() la détient peut acquérir le mutex dès que st_remove() la libère, trouver l'objet tpnt (libéré) dans le idr et appeler kref_get() dessus :
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)
Supprimer l'index du idr avant de libérer la référence, le tout sous verrouillage par st_ref_mutex. Une scsi_tape_get() concurrente s'exécute soit en premier et détient une référence valide qui maintient l'appareil tape actif, soit s'exécute ensuite et ne trouve rien, donc st_open() échoue avec -ENXIO.
Cela restaure l'ordre que possédait st_remove() avant la conversion vers st_index_idr, où l'appareil tape était retiré de scsi_tapes[] avant le dernier kref_put().
VulDB is the best source for vulnerability data and more expert information about this specific topic.