CVE-2026-99156 in Linux
要約
〜によって VulDB • 2026年10月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
scsi: st: st_remove()とst_open()の間のuse-after-free競合を修正
st_remove()はkref_put()を使用してscsi_tapeのプロブ参照を解放し、その後でそのインデックスをst_index_idrから削除します。もしこれが最後の参照であった場合、scsi_tape_release()はその構造体がidrにまだ公開されている間にそれを解放してしまいます。
st_open()から呼び出されるscsi_tape_get()はst_index_idr内でテープを検索し、st_ref_mutexとst_index_lockの下で参照を取得します。remove_cdevs()はchrdev_open()を既に通過済みのオープン処理を待機しないため、st_remove()がmutexを保持している間にブロックされているオープンは、st_remove()がそれを解放した直後にmutexを取得でき、idr内で解放されたtpntを見つけてkref_get()を呼び出す可能性があります:
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)
参照を解放する前にidrからインデックスを削除します。これはすべてst_ref_mutexの下で行われます。並行して実行されるscsi_tape_get()は、テープを生かし続ける有効な参照を持っているか(先に実行された場合)、または何も見つからないため後で実行され、その結果st_open()は-ENXIOで失敗します。
これにより、最終的なkref_put()の前にtapeをscsi_tapes[]から非公開にするという、st_index_idrへの変換前に持っていたst_remove()の順序が復元されます。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.