CVE-2026-99053 in Linux
Riassunto
di VulDB • 23/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
tipc: mantenere un riferimento ai nodi trovati tramite nome del collegamento (link name)
La funzione tipc_node_find_by_name() restituisce un nodo dopo aver rilasciato il lock di lettura RCU senza acquisire un riferimento. I gestori LINK_SET, LINK_GET e LINK_RESET_STATS bloccano quindi ed accedono al nodo, creando una condizione di gara con la pulizia guidata dal timer per i peer disconnessi. La serializzazione del netlink generico non esclude il timer del nodo.
La seguente interleaving può lasciare un gestore che utilizza un nodo già liberato:
CPU 0: trova il nodo sotto RCU e rilascia il lock di lettura del nodo CPU 1: tipc_node_timeout() cancella i collegamenti e scollega il peer disconnesso CPU 1: rilascia i riferimenti alla lista e al timer, accodando la chiamata a tipc_node_free() CPU 0: esce dalla sezione critica di lettura RCU CPU 1: completa il periodo di grazia (grace period) e libera il nodo CPU 0: acquisisce il lock del nodo tramite un puntatore obsoleto
LINK_SET utilizza inoltre l'indirizzo media del nodo dopo aver rilasciato il lock del nodo, quando passa i pacchetti in coda a tipc_bearer_xmit().
KASAN su v7.3-rc5 ha segnalato:
BUG: KASAN: slab-use-after-free in _raw_read_lock_bh Scrittura di dimensione 4 all'indirizzo ffff88807e06f008 da parte del task poc/92 Call Trace: _raw_read_lock_bh kernel/locking/spinlock.c:287 tipc_nl_node_set_link net/tipc/node.c:2475 genl_family_rcv_msg_doit net/netlink/genetlink.c:1114 genl_rcv_msg net/netlink/genetlink.c:1209 netlink_rcv_skb net/netlink/af_netlink.c:2575
Allocato dal task 0: tipc_node_create net/tipc/node.c:539 tipc_node_check_dest net/tipc/node.c:1196 tipc_disc_rcv net/tipc/discover.c:252
Liberato dal task 92: kfree mm/slub.c:6801 rcu_core kernel/rcu/tree.c:2919
Ultima creazione di lavoro potenzialmente correlata: __call_rcu_common.constprop.0 kernel/rcu/tree.c:3181 tipc_node_timeout net/tipc/node.c:814
Acquisire un riferimento al nodo selezionato con kref_get_unless_zero() prima di uscire da RCU, restituendo NULL se il nodo è già stato rilasciato. Rilasciare tale riferimento ad ogni uscita dal chiamante dopo l'ultimo accesso al nodo, inclusa la trasmissione in LINK_SET. Mantenere l'ordine esistente della ricerca dei collegamenti e del locking affinché la rimozione concorrente dei collegamenti segua ancora i percorsi di errore esistenti.
If you want to get best quality of vulnerability data, you may have to visit VulDB.