В ядре Linux устранена следующая уязвимость:
ALSA: seq: Очистить указатель события переменной при чтении.
snd_seq_read() копирует заголовок события переменной длины, поставленный в очередь, в пользовательское пространство.
перед расширением полезной нагрузки. События переменной длины в очереди используют
SNDRV_SEQ_EXT_CHAINED внутри, а data.ext.ptr указывает на первый
расширительная ячейка. Сторона чтения удаляет биты SNDRV_SEQ_EXT_* из data.ext.len перед
копировать, но data.ext.ptr остается нетронутым.
Клиент секвенсора пользовательского пространства
поэтому может записать событие прямой переменной в себя и прочитать обратно
адрес ядра ячейки расширения из возвращенного заголовка. Очистите указатель временного заголовка перед копированием_to_user(). Оригинал
событие в очереди остается неизменным и по-прежнему передается
snd_seq_expand_var_event(), поэтому расширение полезной нагрузки продолжает использовать
внутренняя цепочка.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ALSA: seq: Clear variable event pointer on read snd_seq_read() copies a queued variable-length event header to userspace before expanding the payload. Queued variable-length events use SNDRV_SEQ_EXT_CHAINED internally, and data.ext.ptr points at the first extension cell. The read side strips SNDRV_SEQ_EXT_* bits from data.ext.len before the copy, but it leaves data.ext.ptr untouched. A userspace sequencer client can therefore write a direct variable event to itself and read back the extension-cell kernel address from the returned header. Clear the temporary header pointer before copy_to_user(). The original queued event remains unchanged and is still passed to snd_seq_expand_var_event(), so payload expansion keeps using the internal chain.