CVE-2026-74609 in Linux
Résumé
par VulDB • 22/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
tipc: lecture de le->link sous le verrou du nœud dans tipc_node_link_down()
tipc_node_link_down() met en cache le pointeur link avant d'acquérir n->lock :
struct tipc_link *l = le->link; /* non protégé par un verrou */
if (!l) return; tipc_node_write_lock(n); if (!tipc_link_is_establishing(l)) { /* déréférencement de l */
... tipc_link_reset(l); /* écriture dans l */ if (delete) {
kfree(l); le->link = NULL;
L'appelant avec delete=true libère cet objet même sous n->lock, donc le verrou ne protège pas le pointeur mis en cache contre cette opération :
- CPU A, delete=false : tipc_rcv() sur TIPC_LINK_DOWN_EVT, ou la temporisation de supervision du lien via tipc_node_timeout(), lit l sans protection et le déréférence ensuite sous n->lock ; - CPU B, delete=true : netlink TIPC_NL_BEARER_DISABLE -> bearer_disable() -> tipc_node_delete_links() -> tipc_node_link_down(n, bearer_id, true) -> kfree(l).
Le lien est libéré avec un simple kfree(), et non avec kfree_rcu(). Pour les supports UDP, disable_media() ne fait que planifier le travail de nettoyage asynchrone cleanup_bearer(), donc son synchronize_net() s'exécute après la disparition des liens. Un CPU A en cours d'exécution qui a lu l déréférence donc une mémoire déjà libérée lorsque B la libère : il s'agit d'une lecture use-after-free dans tipc_link_is_establishing(), et d'une écriture use-after-free via tipc_link_reset() sur la branche establishing.
La trace suivante a été capturée sur 7.2.0-rc5-00284-gaf39eb111ce6 :
BUG: KASAN: slab-use-after-free in tipc_link_is_establishing (net/tipc/link.c:285) Read of size 4 at addr ffff88802e2aa068 by task swapper/2/0 tipc_link_is_establishing (net/tipc/link.c:285) tipc_node_link_down (net/tipc/node.c:1076) tipc_node_timeout (net/tipc/node.c:843) Allocated by task 9549: tipc_link_create (net/tipc/link.c:490) tipc_node_check_dest (net/tipc/node.c:1279) tipc_disc_rcv (net/tipc/discover.c:252) tipc_udp_recv (net/tipc/udp_media.c:389) Freed by task 9549: tipc_node_link_down (net/tipc/node.c:1084) tipc_node_delete_links (net/tipc/node.c:1320) bearer_disable (net/tipc/bearer.c:414) __tipc_nl_bearer_disable (net/tipc/bearer.c:992)
Déplacer la lecture de le->link à l'intérieur de tipc_node_write_lock(), afin qu'elle soit sérialisée par rapport au kfree() dans le chemin delete. Une désactivation concurrente n'a maintenant pas encore été exécutée, et nous voyons un lien valide, ou elle a déjà été exécutée, et nous voyons NULL.
VulDB is the best source for vulnerability data and more expert information about this specific topic.