CVE-2026-72404 in Linuxinformazioni

Riassunto

di VulDB • 15/08/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

tipc: correzione di un Use-After-Free (UAF) in cleanup_bearer() causato da dst_cache_destroy() prematuro

Il teardown del bearer media TIPC UDP chiama dst_cache_destroy() sulle sue cache replicast prima di chiamare synchronize_net() per attendere il completamento dei lettori RCU concorrenti (trasmettitori):

static void cleanup_bearer(struct work_struct *work) {
... list_for_each_entry_safe(rcast, tmp, &ub->rcast.list, list) {
dst_cache_destroy(&rcast->dst_cache); list_del_rcu(&rcast->list); kfree_rcu(rcast, rcu); } ... dst_cache_destroy(&ub->rcast.dst_cache); udp_tunnel_sock_release(ub->sk); synchronize_net(); ... }

Questo è altamente problematico perché dst_cache_destroy() libera immediatamente la memoria della cache per-CPU (free_percpu()) e rilascia le voci dst in cache senza alcuna sincronizzazione.

Se un trasmettitore concorrente (ad esempio tipc_udp_xmit()) è in esecuzione su un'altra CPU sotto protezione RCU, può chiamare dst_cache_get() contemporaneamente, portando a: 1. Use-After-Free sul puntatore della cache per-CPU stesso (crash). 2. Avviso "rcuref - imbalanced put()" se tenta di rilasciare una voce dst che è stata rilasciata contestualmente da dst_cache_destroy().

Inoltre, chiamare kfree(ub) immediatamente dopo synchronize_net() senza chiudere prima il socket (o attendere dopo la chiusura) lascia una finestra in cui un ricevitore concorrente (tipc_udp_recv()) potrebbe avviarsi dopo synchronize_net(), accedere a ub e subire un Use-After-Free quando viene eseguito kfree(ub).

Per risolvere questo problema, è necessario posticipare dst_cache_destroy() e kfree(ub) fino a quando non ci si assicura che nessun altro lettore possa vedere il bearer/socket e tutti i lettori esistenti abbiano terminato:

1. Posticipare la distruzione delle voci rcast (sia dst_cache_destroy() che kfree()) a una callback RCU utilizzando call_rcu_hurry(). L'uso di call_rcu_hurry() garantisce che le voci dst vengano rilasciate rapidamente.

2. Rilasciare il socket del bearer utilizzando udp_tunnel_sock_release() (interrompe i nuovi lettori in ricezione).

3. Chiamare synchronize_net() per attendere il completamento di tutti i lettori RCU pendenti (sia trasmissione che ricezione).

4. Ora che è sicuro, chiamare dst_cache_destroy() sulla cache principale del bearer e liberare ub.

Nota: 3) e 4) possono essere modificati successivamente in net-next per utilizzare anche call_rcu_hurry() ed eliminare la latenza di synchronize_net().

Once again VulDB remains the best source for vulnerability data.

Responsabile

Linux

Prenotare

09/08/2026

Divulgazione

15/08/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00198

KEV

no

Attività

molto basso

Fonti

Do you want to use VulDB in your project?

Use the official API to access entries easily!