В ядре Linux устранена следующая уязвимость:
iio: dac: ad3552r-hs: исправлена запись за пределами границ в ad3552r_hs_write_data_source
Когда simple_write_to_buffer() завершается успешно, он возвращает количество байтов.
фактически скопировано в буфер. В коде неправильно используется count
в качестве индекса для нулевого завершения вместо фактических скопированных байтов. Если счетчик превышает размер буфера, это приводит к записи за пределами буфера.
Добавьте проверку счетчика и используйте возвращаемое значение в качестве индекса. Ошибка была проверена с использованием демонстрационного модуля, который отражает оригинал.
код и был протестирован под QEMU. Схема ошибки:
— Фиксированный 64-байтовый буфер стека заполняется с помощью count.
- Если count > 64, код все равно выполняет buf[count] = '\0', вызывая
- запись в стек за пределами допустимого диапазона.
Шаги для воспроизведения:
- Открывает узел устройства.
- Записывает в него 128 байт A.
- При этом происходит переполнение 64-байтового буфера стека, и KASAN сообщает об OOB. Найдено с помощью статического анализа. Это похоже на
commit da9374819eb3 («iio: серверная часть: исправить запись за пределами границ»)
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: iio: dac: ad3552r-hs: fix out-of-bound write in ad3552r_hs_write_data_source When simple_write_to_buffer() succeeds, it returns the number of bytes actually copied to the buffer. The code incorrectly uses 'count' as the index for null termination instead of the actual bytes copied. If count exceeds the buffer size, this leads to out-of-bounds write. Add a check for the count and use the return value as the index. The bug was validated using a demo module that mirrors the original code and was tested under QEMU. Pattern of the bug: - A fixed 64-byte stack buffer is filled using count. - If count > 64, the code still does buf[count] = '\0', causing an - out-of-bounds write on the stack. Steps for reproduce: - Opens the device node. - Writes 128 bytes of A to it. - This overflows the 64-byte stack buffer and KASAN reports the OOB. Found via static analysis. This is similar to the commit da9374819eb3 ("iio: backend: fix out-of-bound write")