CVE-2026-80628 in Linux
Сводка
по VulDB • 28.08.2026
В ядре Linux была устранена следующая уязвимость:
ALSA: seq: oss: Синхронизация состояния сброса readq с q->lock
Функция snd_seq_oss_readq_clear() обнуляет qlen, head и tail без захвата блокировки q->lock, хотя обычные пути чтения и записи сериализуют то же состояние кольцевого буфера под этой спинблокировкой. В результате может возникнуть гонка (race condition) между сбросом и функциями snd_seq_oss_readq_free() или snd_seq_oss_readq_put_event(), что приводит к сохранению устаревших записей в очереди, потере недавно добавленных элементов или неверному сообщению о готовности после пробуждения. KCSAN сообщает о гонке данных между snd_seq_oss_readq_clear() и snd_seq_oss_readq_free().
Необходимо захватывать q->lock при очистке кольцевого буфера и сбросе input_time. Логика добавления элементов (enqueue) вынесена во вспомогательную функцию, вызываемую с уже установленной блокировкой, чтобы snd_seq_oss_readq_put_timestamp() обновляла свое состояние подавления под той же блокировкой, избегая гонки со путем сброса.
Сценарий ошибки включает два потока выполнения, где каждый столбец показывает порядок операций внутри этого пути:
путь сброса: заблокированный обновиатель readq: 1. snd_seq_oss_reset() или 1. Чтущий поток или производитель обратного вызова освобождение достигает захватывает q->lock для той же очереди. snd_seq_oss_readq_clear(). 2. snd_seq_oss_readq_clear() 2. Обновиатель проверяет или изменяет обнуляет qlen, head, tail, qlen, head и tail. и input_time. 3. snd_seq_oss_readq_clear() 3. Обновиватель завершает свою пробуждает ожидающие потоки на последовательность read-modify-write. q->midi_sleep. 4. Без захвата q->lock сброс 4. Полученное состояние кольцевого буфера может пересекаться с определяет будущие чтения и готовность. заблокированным обновлением.
KCSAN сообщает:
BUG: KCSAN: data-race in snd_seq_oss_readq_clear / snd_seq_oss_readq_free
запись в 0xffff8881069fe608 размером 4 байта выполнена задачей 120516 на cpu 0: snd_seq_oss_readq_free+0x6c/0x80 snd_seq_oss_read+0xcb/0x250 odev_read+0x38/0x60 vfs_read+0xff/0x600 ksys_read+0xb4/0x140 __x64_sys_read+0x46/0x60 do_syscall_64+0xbb/0x2f0 entry_SYSCALL_64_after_hwframe+0x77/0x7f
чтение из 0xffff8881069fe608 размером 4 байта выполнено задачей 120517 на cpu 1: snd_seq_oss_readq_clear+0x1f/0x90 snd_seq_oss_reset+0xa7/0xf0 snd_seq_oss_ioctl+0x6f6/0x7e0 odev_ioctl+0x56/0xc0 __x64_sys_ioctl+0xd1/0x120 do_syscall_64+0xbb/0x2f0 entry_SYSCALL_64_after_hwframe+0x77/0x7f
значение изменилось: 0x00000001 -> 0x00000000
If you want to get the best quality for vulnerability data then you always have to consider VulDB.