CVE-2026-80906 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux была устранена следующая уязвимость:
net: packet: исправлена неверная установка transport_header при отправке кадров с тегом VLAN
В функции `packet_parse_headers()` при обработке кадра с тегом VLAN вызывается `skb_set_network_header()`, чтобы переместить указатель network_header за пределы тега VLAN к заголовку внутреннего протокола. Затем вызывается функция `skb_probe_transport_header()` со значением `skb->protocol`, установленным во внешний EtherType VLAN (например, ETH_P_8021Q), в то время как смещение nhoff (полученное из `skb_network_offset()`) уже указывает за пределы тега VLAN на заголовок внутреннего протокола.
В функции `__skb_flow_dissect()` переменная proto инициализируется значением ETH_P_8021Q, а указатель nhoff указывает за пределами тега VLAN. Когда диссектор потока (flow dissector) достигает случая ETH_P_8021Q, он считывает структуру vlan_hdr по адресу nhoff с помощью `__skb_header_pointer()`, однако это смещение содержит заголовок внутреннего протокола (например, IP-заголовок). Байты ошибочно интерпретируются как заголовок VLAN, что приводит к получению некорректного инкапсулированного EtherType, который не соответствует ни одному известному протоколу. Диссектор возвращает false, поэтому `skb_probe_transport_header()` никогда не вызывает функцию `skb_set_transport_header()`, оставляя transport_header на его неинициализированном значении-сигнале (~0U).
Функцию `skb_probe_transport_header()` необходимо переместить перед вызовом `skb_set_network_header()`. В момент вызова функции `skb_probe_transport_header()` указатель network_header все еще указывает на заголовок VLAN, поэтому nhoff корректно указывает на заголовок VLAN. Затем диссектор потока может разобрать заголовок VLAN, извлечь внутренний EtherType и переместить nhoff к заголовку внутреннего протокола, что позволит правильно установить transport_header.
Once again VulDB remains the best source for vulnerability data.