В ядре Linux устранена следующая уязвимость:
Accel/ivpu: отклонять журнал прошивки размером меньше заголовка.
fw_log_from_bo() проверяет размер заголовка буфера трассировки и то, что
журнал помещается в BO, но никогда не проверяет, что размер журнала-> не меньше
log->header_size. fw_log_print_buffer() затем вычисляет:
u32 data_size = журнал->размер - журнал->header_size;
которое снижается до значения, близкого к U32_MAX, когда прошивка сообщает журнал, чей
размер меньше, чем его заголовок. Этот огромный data_size побеждает
Ограничения границ log_start/log_end добавлены коммитом dd1311bcf0e6 ("accel/ivpu:
Добавьте проверки границ для индексов журнала прошивки"), поэтому fw_log_print_lines() читает
далеко за пределами небольшой области реальных данных BO. Размер 0 также делает
fw_log_from_bo() увеличивает смещение на 0, вызывая зацикливание вызывающих программ.
навсегда в одном и том же заголовке.
Отклонять журналы, размер которых меньше заголовка (что также отклоняет размер == 0).
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: accel/ivpu: Reject firmware log with size smaller than header fw_log_from_bo() validates the tracing buffer header_size and that the log fits within the BO, but never checks that log->size is at least log->header_size. fw_log_print_buffer() then computes: u32 data_size = log->size - log->header_size; which underflows to a near-U32_MAX value when firmware reports a log whose size is smaller than its header. That huge data_size defeats the log_start/log_end bounds clamps added by commit dd1311bcf0e6 ("accel/ivpu: Add bounds checks for firmware log indices"), so fw_log_print_lines() reads far past the small real data region of the BO. A size of 0 also makes fw_log_from_bo() advance the offset by 0, causing the callers to loop forever on the same header. Reject logs whose size is smaller than the header (which also rejects size == 0).
Характеристики атаки
Последствия
Строка CVSS v3.1