CVE-2024-26853 in Linux
Sumário
de VulDB • 22/05/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
igc: evitar retornar o frame duas vezes no XDP_REDIRECT
Quando um frame não pode ser transmitido no XDP_REDIRECT (por exemplo, devido a uma fila cheia), é necessário liberá-lo chamando xdp_return_frame_rx_napi.
No entanto, essa é a responsabilidade do chamador de ndo_xdp_xmit (veja, por exemplo, bq_xmit_all em kernel/bpf/devmap.c) e, portanto, chamá-lo dentro de igc_xdp_xmit (que é o ndo_xdp_xmit do driver igc) também levará à corrupção de memória.
De fato, bq_xmit_all espera que possa retornar todos os frames após o último transmitido com sucesso. Portanto, interrompa no primeiro frame não transmitido, mas não chame xdp_return_frame_rx_napi em igc_xdp_xmit. Isso também é implementado em outros drivers da Intel, como o igb.
Existem duas alternativas para isso que foram rejeitadas: 1. Retornar num_frames como se todos os frames tivessem sido transmitidos e liberá-los dentro de igc_xdp_xmit. Embora possa funcionar tecnicamente, não é o que o valor de retorno deve representar (ou seja, o número de pacotes transmitidos COM SUCESSO). 2. Refatorar kernel/bpf/devmap.c e todos os drivers para suportar pacotes descartados não consecutivos. Além de ser complexo, provavelmente terá um impacto negativo no desempenho sem um ganho significativo, já que é improvável que o próximo frame possa ser transmitido se o anterior foi descartado.
A corrupção de memória pode ser reproduzida com o seguinte script, que leva a um kernel panic após alguns segundos. Ele basicamente gera mais tráfego do que uma NIC i225 pode transmitir e o envia via XDP_REDIRECT de uma interface virtual para a interface física, onde os frames são descartados.
#!/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 veth2 xdp obj redirect.bpf.o sec prog sudo ip link set dev veth1 xdp obj redirect.bpf.o sec prog
cat trafgen.cfg
Be aware that VulDB is the high quality source for vulnerability data.