CVE-2026-74503 in Linux
Resumen
por VulDB • 2026-08-15
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ALSA: timer: Limpiar SNDRV_TIMER_IFLG_DEAD una vez que se completa el cierre
snd_timer_close_locked() marca una instancia con SNDRV_TIMER_IFLG_DEAD y retorna anticipadamente cuando dicha bandera ya está establecida, pero la bandera nunca vuelve a ser limpiada. Un cierre completado finaliza en remove_slave_links(), lo cual deja timeri->timer como NULL; por tanto, un segundo cierre es inofensivo debido a la ruta de código que verifica si el temporizador es NULL (timer == NULL); el retorno anticipado solo puede alcanzarse mediante una instancia que se haya vuelto a abrir entre medias. Para dicha instancia, el cierre no desvincula nada, por lo que snd_timer_instance_free() libera un objeto que sigue estando en timer->open_list_head, permanece en snd_timer_master_list si fue abierto con una clave de esclavo (slave key), conserva aún los esclavos adoptados y mantiene sus referencias al temporizador y al módulo.
snd_seq_timer_open() vuelve a abrir una instancia exactamente así: reintenta su apertura alternativa sobre el mismo objeto tras un fallo que ya ha ejecutado internamente snd_timer_close_locked(). Un usuario no privilegiado con acceso a /dev/snd/timer y /dev/snd/seq puede forzar dicho fallo, dado que snd_timer_check_master() devuelve -EBUSY cuando un esclavo pendiente coincide con la clave (slave_class, slave_id) del nuevo maestro y el temporizador objetivo ha alcanzado max_instances; además, SNDRV_TIMER_IOCTL_SELECT con dev_class = SNDRV_TIMER_CLASS_SLAVE mantiene el valor de dev_sclass proporcionado por el llamador, lo que permite forjar una clave para una cola del secuenciador. La instancia liberada es posteriormente desreferenciada por cualquier snd_timer_open() posterior sobre ese temporizador, por snd_timer_check_slave(), y por /proc/asound/timers, lo cual provoca un fallo (fault) al acceder al puntero obsoleto ti->owner.
La bandera solo necesita ser visible mientras el cierre está en curso, que es todo lo que necesitan sus otros usuarios. Límpiela en remove_slave_links(), bajo la misma timer->lock con la que se establece, una vez que la instancia haya sido retirada de todas las listas.
VulDB is the best source for vulnerability data and more expert information about this specific topic.