CVE-2026-53264
net/sched: act_api: usa RCU con deallocazione differita per il ciclo di vita delle azioni
- Pubblicato
- 25 giu 2026
- Aggiornato
- 5 ago 2026
- Assegnazione CNA
- Linux
- Evidenza osservata
- 7 ago 2026
CVSS primario
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HBasso · prossimi 30 giorni
- Percentile
- 15,6%
- Data del modello
- 21 set 2026
L'EPSS è una stima statistica, non una certezza o una misura di impatto. Combinalo con CVSS, stato KEV, esposizione e ambiente.
Riepilogo
Nel kernel Linux è stata risolta la seguente vulnerabilità: net/sched: act_api: usa RCU con deallocazione differita per il ciclo di vita delle azioni Quando NEWTFILTER e DELFILTER vengono eseguiti contemporaneamente è possibile creare una race condition con un'azione associata. Illustriamo con CPU0 che esegue NEWTFILTER e CPU1 che esegue DELFILTER: 0: mutex_lock() <-- mantiene il lock idr 0: rcu_read_lock() 0: p = idr_find(idr, index) <-- l'azione p è valida (RCU protegge IDR) 0: mutex_unlock() <-- rilascia il lock idr 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex mantenuto 1: idr_remove(idr, index) <-- Azione rimossa da IDR 1: mutex_unlock() <-- mutex rilasciato consentendoci di eliminare l'azione 1: tcf_action_cleanup(p); kfree(p) <-- Libera p immediatamente, nessun differimento 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- ops, UAF p punta a memoria liberata Questa patch corregge la race condition tra NEWTFILTER e DELFILTER aggiungendo struct rcu_head a tc_action usato nel differimento e introducendo call_rcu() nel percorso di eliminazione per differire la kfree() finale. Nota: questo è un revert del commit d7fb60b9cafb ("net_sched: get rid of tcfa_rcu") ma anche una modernizzazione/semplificazione per usare direttamente kfree_rcu(). Illustriamo il nuovo percorso di codice ripristinato: 0: rcu_read_lock() 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex mantenuto 1: idr_remove(idr, index) 1: mutex_unlock() 1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- differisce kfree dopo il periodo di grazia 0: p = idr_find(idr, index) 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- fallisce, refcnt già 0 1: rcu_read_unlock() <-- rilascia così la deallocazione può avvenire dopo il periodo di grazia Dopo che CPU1 chiama idr_remove(), l'oggetto non è più raggiungibile tramite IDR. La successiva idr_find() di CPU0 restituirà NULL, e anche se mantenesse ancora un puntatore obsoleto, la kfree() immediata è ora differita fino al termine del periodo di grazia RCU, quindi non può verificarsi alcun UAF.
Fonti
2Utilizzo responsabile
Utilizza le informazioni sulla vulnerabilità solo sui sistemi che possiedi o che sei autorizzato a testare. Kitploit si collega ai metadati della ricerca pubblica e non memorizza codici exploit o payload dannosi.