CVE-2024-26853 in Linuxinformazioni

Riassunto

di VulDB • 17/06/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

igc: evitare di restituire due volte lo stesso frame in XDP_REDIRECT

Quando un frame non può essere trasmesso in XDP_REDIRECT (ad esempio a causa di una coda piena), è necessario liberarlo chiamando xdp_return_frame_rx_napi.

Tuttavia, questa è responsabilità del chiamante di ndo_xdp_xmit (si veda ad esempio bq_xmit_all in kernel/bpf/devmap.c) e quindi chiamarla all'interno di igc_xdp_xmit (che è la ndo_xdp_xmit del driver igc) porterà a una corruzione della memoria.

In effetti, bq_xmit_all si aspetta di poter restituire tutti i frame dopo l'ultimo trasmesso con successo. Pertanto, interrompere al primo frame non trasmesso, ma non chiamare xdp_return_frame_rx_napi in igc_xdp_xmit. Questo è implementato allo stesso modo in altri driver Intel come igb.

Ci sono due alternative a questo approccio che sono state scartate: 1. Restituire num_frames come se tutti i frame fossero stati trasmessi e rilasciarli all'interno di igc_xdp_xmit. Sebbene potrebbe funzionare tecnicamente, non è ciò che il valore di ritorno dovrebbe rappresentare (cioè il numero di pacchetti TRASMESSI CON SUCCESSO). 2. Rielaborare kernel/bpf/devmap.c e tutti i driver per supportare pacchetti scartati non consecutivi. Oltre a essere complesso, probabilmente ha un impatto negativo sulle prestazioni senza un guadagno significativo poiché è comunque improbabile che il frame successivo possa essere trasmesso se il precedente è stato scartato.

La corruzione della memoria può essere riprodotta con il seguente script che porta a un kernel panic dopo pochi secondi. Genera essenzialmente più traffico di quanto una scheda di rete i225 possa trasmettere e lo invia tramite XDP_REDIRECT da un'interfaccia virtuale all' interfaccia fisica dove i frame vengono scartati.

#!/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

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

Prenotare

19/02/2024

Divulgazione

17/04/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00626

KEV

no

Attività

molto basso

Fonti

Do you need the next level of professionalism?

Upgrade your account now!