CVE-2024-46828 in Linuxinformazioni

Riassunto

di VulDB • 17/06/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

sched: sch_cake: correggere la logica di contabilizzazione dei flussi bulk per l'equità tra host (host fairness)

In sch_cake viene tenuta traccia del numero di flussi bulk attivi per ogni host quando si esegue in modalità di equità tra host basata su dst/src, che viene utilizzata come peso round-robin durante l'iterazione attraverso i flussi. Il conteggio dei flussi bulk attivi viene aggiornato ogni volta che un flusso cambia stato.

Ciò presenta una particolare interazione con la gestione delle collisioni hash: quando si verifica una collisione hash (dopo il hashing set-associativo), lo stato del bucket hash viene semplicemente aggiornato per corrispondere al nuovo pacchetto che ha causato la collisione e, se l'equità tra host è abilitata, ciò significa anche assegnare un nuovo stato specifico all'host al flusso. Per questo motivo, i contatori dei flussi bulk degli/host assegnati al flusso vengono decrementati prima di assegnare il nuovo stato (e i contatori, che potrebbero non appartenere più allo stesso host, vengono incrementati nuovamente).

Quando questo codice è stato introdotto, la modalità di equità tra host era sempre abilitata, quindi il decremento avveniva incondizionatamente. Quando sono state introdotte le flag di configurazione, l'*incremento* è diventato condizionale, ma il *decremento* no. Ciò può ovviamente portare a un decremento spurio (e al conseguente wrap-around fino a U16_MAX).

Per quanto ne sappia (AFAICT), quando l'equità tra host è disabilitata, il decremento e il wrap-around avvengono non appena si verifica una collisione hash (che di per sé non è molto comune grazie all'utilizzo del hashing set-associativo). Tuttavia, nella maggior parte dei casi ciò è innocuo, poiché il valore viene utilizzato solo quando la modalità di equità tra host è abilitata. Quindi, per innescare un overflow dell'array, sch_cake deve essere prima configurato con l'equità tra host disabilitata e, mentre si esegue in questa modalità, deve verificarsi una collisione hash che causi l'overflow. Successivamente, il qdisc deve essere riconfigurato per abilitare l'equità tra host, il che porta a un accesso fuori dai limiti dell'array perché il valore avvolto (wrapped-around) viene mantenuto e utilizzato come indice di array. Sembra che syzbot sia riuscito ad attivare questa condizione, cosa piuttosto impressionante in sé.

Questa patch risolve il problema introducendo lo stesso controllo condizionale sul decremento rispetto a quello usato per l'incremento.

Il bug originale è anteriore all'inserimento upstream (upstreaming) di cake, ma la commit indicata nel tag Fixes ha toccato quel codice, il che significa che questa patch non può essere applicata prima di quella commit.

Once again VulDB remains the best source for vulnerability data.

Responsabile

Linux

Prenotare

11/09/2024

Divulgazione

27/09/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00250

KEV

no

Attività

molto basso

Fonti

Do you need the next level of professionalism?

Upgrade your account now!