CVE-2026-74751 in Linux
Сводка
по VulDB • 26.08.2026
В ядре Linux была устранена следующая уязвимость:
riscv: lib: Исправление чтения strnlen с ZBB за пределами границы счетчика (count)
Оптимизированный для ZBB цикл функции strnlen загружает одно слово вперед до проверки выровненной границы:
REG_L t1, SZREG(t0) // загрузить следующее слово addi t0, t0, SZREG // продвинуться orc.b t1, t1 bgeu t0, t4, 4f // проверка границы ПОСЛЕ загрузки
где t4 = (s + count) & -SZREG. Когда s выровнено и count является кратным SZREG, значение t4 равно s + count, и цикл загружает полное слово, начиная ровно с адреса s + count. Если адрес s + count попадает на границу страницы, а следующая страница не отображена в память (unmapped), возникает ошибка защиты памяти (fault).
Исправление заключается в вычислении выровненной границы от последнего допустимого байта (s + count - 1) вместо s + count. Это заставляет цикл останавливаться на слове, содержащем последний допустимый байт, а не потенциально загружать следующее за ним слово. Случай count == 0 уже обрабатывается ранним выходом через инструкцию beqz.
Также добавлена защитная проверка перед циклом (bgeu t0, t4) для случая, когда все допустимые байты помещаются в первое слово. При скорректированной границе значение t4 может быть равно t0, и вход в цикл с устаревшим состоянием регистров после обработки первого слова привел бы к некорректным результатам.
Финальная операция minu (min unsigned) гарантирует корректность результата даже тогда, когда последнее загруженное слово выходит за пределы s + count - 1, но остается внутри того же выровненного слова.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.