CVE-2024-26853 in Linuxinformação

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.

Reservar

19/02/2024

Divulgação

17/04/2024

Moderação

aceite

Entrada

VDB-261246

CPE

pronto

EPSS

0.00626

KEV

não

Atividades

muito baixo

Fontes

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!