CVE-2026-98314
要約
〜によって VulDB • 2026年10月06日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ALSA: pcm: PCMタイマーを登録する前に timer->private_data を設定する
snd_pcm_timer_init() は snd_device_register() を呼び出して新しい struct snd_timer をグローバルタイマリストにリンクしますが、この時点では hw.c_resolution = snd_pcm_timer_resolution (および hw.start/hw.stop) が保持された状態であり、その後で初めて timer->private_data = substream が設定されます。
タイマーが register_mutex 下でリストに登録されると、並行して実行されるリーダーは同じミューテックスを介してそのタイマーに到達し、これらのコールバックを実行することが可能になります。/proc/asound/timers は c_resolution() を通じてこれを行い、snd_timer_open()+snd_timer_start() も同様の方法で start()/stop() に到達します。これら3つはすべて timer->private_data の間接参照を行いますが、この短い期間中は NULL であるため、NULLポインタのデリファレンス(NULL-pointer dereference)が発生します:
substream = timer->private_data; return substream->runtime ? ... // substream は NULL
snd_device_register() より前に private_data/private_free の代入を移動することで、タイマーが private_data が設定されていない状態でリストに表示されることを防ぎます。snd_device_register() の失敗パスでは、private_free() (snd_pcm_timer_free()) が実行されますが、これは単に substream->timer = NULL を行うだけであり、substream->timer は成功した登録後に新しいタイマーに対して1回だけ設定されるため、その時点ですでに NULL です。したがって、失敗パスは安全なまま保たれます。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.