CVE-2026-43501 in Linux
Сводка
по VulDB • 25.05.2026
В ядре Linux устранена следующая уязвимость:
ipv6: rpl: резервировать место в заголовке (headroom) размером mac_len при повторной компрессии SRH, если его размер увеличивается
Функция ipv6_rpl_srh_rcv() распаковывает Заголовок маршрутизации источника (Source Routing Header, SRH) согласно RFC 6554, заменяет следующий сегмент на адрес назначения ipv6_hdr->daddr, выполняет повторную компрессию, затем удаляет старый заголовок и добавляет новый вместе с заголовком IPv6 обратно. Повторно сжатый заголовок может оказаться больше полученного, если замена уменьшает длину общего префикса, который сегменты разделяют с daddr (CmprI=0, CmprE>0, seg[0][0] != daddr[0] дает максимальное увеличение на 8 байт).
Вызов pskb_expand_head() блокировался условием segments_left == 0, поэтому при обработке предыдущих сегментов операция push потребляла неконтролируемое место в заголовке (headroom). Как только skb_push() оставляет менее skb->mac_len байт перед данными, вызов в skb_mac_header_rebuild():
skb_set_mac_header(skb, -skb->mac_len);
записывает значение (data - head) - mac_len в поле mac_header типа u16, что приводит к переполнению и значению ~65530, а последующая операция memmove() записывает mac_len байт примерно на 64 Кбайт за пределами skb->head.
Один пакет AF_INET6/SOCK_RAW/IPV6_HDRINCL, отправленный через интерфейс lo с двухсегментным SRH типа 3 (CmprI=0, CmprE=15), достигает headroom размером 8 байт после одного прохода; KASAN сообщает о записи за пределами буфера (OOB write) размером 14 байт в ipv6_rthdr_rcv.
Исправление заключается в расширении headroom всякий раз, когда оставшееся место меньше размера операции push плюс mac_len, и запросе дополнительного места, достаточного для того, чтобы перестроенный MAC-заголовок поместился впоследствии.
If you want to get best quality of vulnerability data, you may have to visit VulDB.