CVE-2026-74558 in Linuxinformazioni

Riassunto

di VulDB • 16/08/2026

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

xsk: recupero dei descrittori Tx non validi nel percorso batch ZC (zero-copy)

L'analizzatore di batch Tx zero-copy si interrompe quando incontra un descrittore non valido. Se ciò accade dopo uno o più descrittori di continuazione, il consumatore Tx può avanzare oltre frammenti che né sono stati sottoposti al driver né restituiti all'userspace tramite l'anello di completamento (completion ring).

Un problema simile si verifica quando un pacchetto supera xdp_zc_max_segs. I descrittori consumati fino al limite vengono rilasciati senza completamento, e i successivi descrittori di continuazione possono essere interpretati come l'inizio di un altro pacchetto.

Analizzare i batch Tx in unità di pacchetto e distinguere i descrittori appartenenti a pacchetti validi e completi dai descrittori consumati durante lo svuotamento (draining) di un pacchetto non valido o eccessivamente grande. Restituire i primi al driver e accodare gli ultimi all'area degli indirizzi CQ in modo che l'userspace possa recuperare le frame UMEM corrispondenti.

Trattare un descrittore invalido isolato come un pacchetto composto da un solo descrittore, destinato esclusivamente al recupero (reclaim-only). L'avanzamento del consumatore dell'anello Tx rilascia la slot dell'anello, ma di per sé non restituisce la proprietà della frame UMEM referenziata all'userspace.

Una volta iniziato lo svuotamento, continuare fino a quando il descrittore end-of-packet (EOP) del pacchetto è stato consumato. Mantenere lo stato di draining sul socket se EOP non è ancora stato fornito, in modo che il draining possa continuare durante una chiamata successiva. Lasciare i pacchetti incompleti ma altrimenti validi sull'anello Tx.

Anche gli pool Shared-UMEM che utilizzano Tx multi-buffer richiedono un'analisi basata sui frame del pacchetto. Elaborare i loro socket Tx un pacchetto alla volta, preservando il meccanismo di equità per-socket esistente, invece di utilizzare la fallback legacy a un solo descrittore. Mantenere tale fallback per gli pool condivisi che non utilizzano Tx multi-buffer. Poiché lo stato di draining è mantenuto per socket e sia i percorsi singoli (singular) che quelli condivisi possono riprendere uno svuotamento interrotto, il passaggio dalla lista dei socket singolari a quella condivisa non richiede una transizione speciale al momento del bind.

Le voci CQ sono posizionali e i driver potrebbero completare solo parte del lavoro Tx restituito da xsk_tx_peek_release_desc_batch(). Pertanto, le voci di sola recupero (reclaim-only) non possono essere pubblicate immediatamente quando ci sono ancora descrittori visibili dal driver in sospeso.

Tracciare il numero di voci CQ visibili dal driver che precedono le voci di recupero. Consentire a xsk_tx_completed() di pubblicare i completamenti Tx hardware parziali e pubblicare le voci di recupero solo dopo che ogni descrittore Tx precedente è stato completato. Completare immediatamente un batch di sola recupero quando non c'è lavoro visibile dal driver davanti ad esso, ed evitare l'accodamento di un altro batch Tx mentre rimangono voci di recupero in sospeso.

Limitare inoltre l'elaborazione dei batch alla dimensione dell'array temporaneo di descrittori del pool, poiché gli anelli Tx appartenenti a socket che condividono una UMEM possono avere dimensioni diverse.

Ciò garantisce che ogni descrittore Tx non valido consumato dal percorso batch ZC sia o sottoposto al driver come parte di un pacchetto valido oppure restituito all'userspace senza violare l'ordinamento dei completamenti CQ.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsabile

Linux

Prenotare

15/08/2026

Divulgazione

15/08/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Do you need the next level of professionalism?

Upgrade your account now!