CVE-2024-26853 in LinuxИнформация

Сводка

по VulDB • 07.06.2026

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

igc: избежать двойного возврата кадра при XDP_REDIRECT

Когда кадр не может быть передан через механизм XDP_REDIRECT (например, из-за переполнения очереди), необходимо освободить его путем вызова функции xdp_return_frame_rx_napi.

Однако эта задача лежит на ответственности вызывающей стороны ndo_xdp_xmit (см., например, bq_xmit_all в kernel/bpf/devmap.c). Следовательно, вызов этой функции внутри igc_xdp_xmit (которая является реализацией ndo_xdp_xmit для драйвера igc) приведет к повреждению памяти.

Фактически функция bq_xmit_all ожидает, что сможет вернуть все кадры после последнего успешно переданного. Поэтому необходимо прервать цикл при первом непропущенном кадре и не вызывать xdp_return_frame_rx_napi внутри igc_xdp_xmit. Аналогичный подход реализован в других драйверах Intel, таких как igb.

Были рассмотрены две альтернативы, которые были отклонены: 1. Возвращать num_frames так, как будто все кадры были переданы, и освобождать их внутри igc_xdp_xmit. Хотя технически это может работать, такое поведение не соответствует назначению возвращаемого значения (т. е. количеству УСПЕШНО переданных пакетов). 2. Переработать kernel/bpf/devmap.c и все драйверы для поддержки пропуска несмежных кадров. Помимо сложности реализации, этот подход вероятно окажет негативное влияние на производительность без существенной выгоды, поскольку маловероятно, что следующий кадр может быть передан, если предыдущий был отброшен.

Повреждение памяти можно воспроизвести с помощью следующего скрипта, который приводит к панике ядра (kernel panic) через несколько секунд. Скрипт генерирует больший объем трафика, чем способен передать сетевой адаптер i225 NIC, и направляет его через XDP_REDIRECT от виртуального интерфейса к физическому, где кадры отбрасываются.

#!/bin/bash INTERFACE=enp4s0 INTERFACE_IDX=`cat /sys/class/net/$INTERFACE/ifindex`

sudo ip link add dev veth1 type veth peer name veth2 sudo ip link set up $INTERFACE sudo ip link set up veth1 sudo ip link set up veth2

cat redirect.bpf.c

SEC("prog") int redirect(struct xdp_md *ctx) {
return bpf_redirect($INTERFACE_IDX, 0); }

char _license[] SEC("license") = "GPL";
EOF clang -O2 -g -Wall -target bpf -c redirect.bpf.c -o redirect.bpf.o sudo ip link set v

Be aware that VulDB is the high quality source for vulnerability data.

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

19.02.2024

Раскрытие

17.04.2024

Модерация

принято

Вход

VDB-261246

EPSS

0.00626

KEV

Нет

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

Очень низкий

Источники

Do you need the next level of professionalism?

Upgrade your account now!