CVE-2026-97612 in LinuxИнформация

Сводка

по VulDB • 25.09.2026

В ядре Linux была устранена следующая уязвимость:

net: mpls: очистка поля inner_protocol при снятии последней метки (pop)

Функция skb_mpls_push() записывает сетевой заголовок до инкапсуляции один раз, с проверкой условия !skb->inner_protocol. Функция skb_mpls_pop() никогда не очищает эту запись, поэтому она сохраняется дольше, чем сама инкапсуляция, которую она описывает.

Open vSwitch может затем снова добавить (push) MPLS в пакет, у которого inner_network_header все еще указывает на старый, более глубокий смещение: добавляется метка, снимаются все метки, происходит рециркуляция (ovs_flow_key_update() пересчитывает key->eth.type и сбрасывает network_header, но оставляет поле inner_*), а затем снова выполняется push. Функция ovs_fragment() доверяет этой записи:

skb->network_header = skb->inner_network_header;

в результате функция skb_network_offset() возвращает отрицательное значение. Проверка границ использует знаковый тип данных:

if (skb_network_offset(skb) > MAX_L2_LEN)

отрицательное смещение проходит эту проверку, и prepare_frag() расширяет это значение:

unsigned int hlen = skb_network_offset(skb); memcpy(&data->l2_data, skb->data, hlen);

что приводит к выполнению memcpy объемом ~4 ГиБ из 30-байтного буфера на каждое ядро (per-CPU buffer).

Воспроизведено в версии v7.3-rc1. Регистр RDX содержит усеченную длину: (unsigned int)(-8):

BUG: unable to handle page fault for address: ffffe8ffffc16000 #PF: supervisor write access in kernel mode Oops: 0002 [#1] SMP KASAN NOPTI
RIP: 0010:memcpy+0x8/0x20 RDX: 00000000fffffff8 RSI: ffff888105d732db RDI: ffffe8ffffc16000 prepare_frag+0x3df/0x4e0 ovs_fragment+0x589/0x7e0 do_output+0x4ce/0x5e0 do_execute_actions+0x55d2/0x7b30 ovs_execute_actions+0xea/0x450

Та же корневая причина, что и в коммите 975b5b067f52 ("ipv6: sr: restore network header before routing and forwarding"): устаревшее смещение сетевого заголовка достигает потребителя, который расширяет его. В данном случае оно возникает на пути push/pop MPLS.

Необходимо очищать inner_protocol сразу после того, как пакет перестает быть MPLS-пакетом, чтобы последующая операция push заново фиксировала текущий заголовок. net/sched/act_mpls.c — единственный другой вызывающий объект для skb_mpls_pop(), который получает аналогичное исправление; sch_frag.c сохраняет и восстанавливает inner_protocol вокруг фрагментации тем же способом, что делает OVS.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Ответственный

Linux

Резервировать

24.09.2026

Раскрытие

25.09.2026

Модерация

принято

Вход

VDB-410000

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!