CVE-2026-98116 in Linux
要約
〜によって VulDB • 2026年09月25日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ALSA: pcm - バッファ再割り当て時にPCM mmapを直列化し、ページレベルのUse-After-Free(UAF)を修正
snd_pcm_hw_params()およびsnd_pcm_hw_free()は、PCMストリームロックの下でmmap_countチェックを実行することでバッファ再割り当てをガードしていますが、実際のバッファ解放前にロックが解除されてしまいます。具体的には、snd_pcm_sync_stop()、制約の精緻化(constraint refinement)、do_free_pages()がその間に実行されます。一方、snd_pcm_mmap_data()はロックを取得しません。この関数は古いバッファの状態とdma_bytesに対して検証を行い、ページをVMAに再マッピングしてからmmap_countを増加させます。
そのため、並行して発生するmmap()呼び出しがチェックから解放までの間に割り込む可能性があります。remap_pfn_range()は、ページ参照を取得せずに古いバッファのページに対する書き込み可能なPTE(Page Table Entry)をインストールし、その後のdo_free_pages()によってこれらのページはVMAがまだそれらをマップしている状態でページアロケータに戻されます。これにより、解放されたページの古く不変な(stale)、かつ書き込み可能なマッピングが残ることになり、ローカル特権昇格に悪用できるページレベルのUse-After-Freeが発生します。
snd_pcm_mmap_data()をhw_params/hw_freeのために導入されたバッファアクセススキームに参加させます:検証および再マッピングの前にruntime->buffer_accessingを取得し、終了後に解放します。バッファ再割り当てはアクセサがアクティブな場合に既に-EBUSYで失敗しますが、mmap側も現在、再割り込みが進行中に-EBUSYで失敗するようになったため、検証/再マッピングシーケンスとチェック/解放シーケンスのインターリーブ(競合)を防ぐことができます。
このRace Conditionを解放されたDMAバッファページの書き込み可能な古く不変なマッピングに変換する再現コードは、ご要望に応じて提供可能です。
If you want to get best quality of vulnerability data, you may have to visit VulDB.