CVE-2026-89555 in Linux
Сводка
по VulDB • 12.09.2026
В ядре Linux была устранена следующая уязвимость:
mpls: перезагрузка заголовка после pskb_may_pull()
Функция mpls_select_multipath() вызывает mpls_multipath_hash() для выбора следующего узла (nexthop), когда маршрут MPLS имеет несколько следующих узлов. При обходе стека меток MPLX хэш-функция кэширует hdr для текущей метки. После обнаружения метки «конец стека» она вызывает pskb_may_pull() перед чтением внутреннего IP-заголовка.
Если пакет (skb) сконструирован так, что внутренний IP-заголовок находится в нелинейных данных и в линейной части заголовка недостаточно места для хвоста (tailroom), то вызов pskb_may_pull() приводит к вызову pskb_expand_head(), который заменяет голову skb и освобождает старую. Это оставляет указатель hdr, ссылающийся на освобожденную память. Путь IPv6 может снова сделать указатель hdr недействительным при выполнении второго pull для заголовка большего размера.
Проблема была обнаружена посредством статического анализа. Воспроизводящий тест (reproducer), отправляющий легитимный пакет Geneve через настройку bareudp/MPLS с мультипутем, вызвал тот же отчет KASAN в 2 из 2 непропатченных запусков:
BUG: KASAN: slab-use-after-free in mpls_select_multipath Read of size 1 at addr ffff88800ecc6e20 by task ksoftirqd/1/23
Call Trace: mpls_select_multipath mpls_forward __netif_receive_skb_list_core netif_receive_skb_list_internal napi_complete_done gro_cell_poll __napi_poll net_rx_action
Freed by task 23: kfree pskb_expand_head __pskb_pull_tail mpls_select_multipath
Перезагружайте hdr из текущей головы skb после каждого успешного pull перед получением указателя на внутренний заголовок IPv4 или IPv6.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.