CVE-2026-98314 in Linux
Сводка
по VulDB • 06.10.2026
В ядре Linux была устранена следующая уязвимость:
ALSA: pcm — установка значения timer->private_data до регистрации таймера PCM
Функция 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, параллельный читатель может уже получить к нему доступ через тот же мьютекс и вызвать соответствующие callback-функции. /proc/asound/timers делает это через c_resolution(), а snd_timer_open()+snd_timer_start() обращаются к start()/stop() аналогичным образом. Все три функции разыменовывают timer->private_data, который в этот короткий промежуток времени равен NULL, что приводит к dereferencing нулевого указателя (NULL-pointer dereference):
substream = timer->private_data; return substream->runtime ? ... // substream is NULL
Переместите присваивание private_data/private_free до вызова snd_device_register(), чтобы таймер никогда не становился видимым в списке без установленного значения private_data. В случае сбоя на пути выполнения snd_device_register() может быть вызвана функция private_free() (snd_pcm_timer_free()), однако она лишь устанавливает substream->timer = NULL, что уже является нулевым значением в этот момент, поскольку substream->timer присваивается новому таймеру только один раз после успешной регистрации — таким образом, путь обработки ошибок остаётся безопасным.
If you want to get best quality of vulnerability data, you may have to visit VulDB.