CVE-2026-89783 in Linux
Сводка
по VulDB • 16.09.2026
В ядре Linux была устранена следующая уязвимость:
xfrm6: исправлена запись за пределами массива в функции xfrm6_input_addr() при переполнении secpath.
Проверка глубины (depth check) в функции xfrm6_input_addr() содержит ошибку «off by one»:
if (1 + sp->len == XFRM_MAX_DEPTH) goto drop; ... sp->xvec[sp->len++] = x;
Функция xfrm_input() может оставлять значение sp->len равным XFRM_MAX_DEPTH, а путь приема в транспортном режиме повторно вызывает входной обработчик IPv6 через функцию xfrm_trans_reinject(), сохраняя secpath. Если внутренний пакет содержит опцию HAO (destination-options) или заголовок маршрутизации типа 2, вызывается функция xfrm6_input_addr() со значением sp->len == XFRM_MAX_DEPTH; проверка (1 + 6 == 6) дает ложный результат, поэтому операция записи sp->xvec[sp->len++] происходит на одну ячейку дальше конца массива xvec[], состоящего из 6 элементов. Запись остается в пределах выделенной памяти sec_path (не обнаруживается KASAN); UBSAN_BOUNDS фиксирует это и вызывает панику при включенном panic_on_warn.
Используйте условие «sp->len >= XFRM_MAX_DEPTH», согласованное с логикой xfrm_input(). Это также восстанавливает один уровень цепочки, который старый check отклонял при sp->len == 5.
UBSAN: array-index-out-of-bounds в net/ipv6/xfrm6_input.c:309:10 индекс 6 выходит за пределы диапазона для типа 'xfrm_state *[6]'
If you want to get best quality of vulnerability data, you may have to visit VulDB.