CVE-2026-74609 in Linux
Zusammenfassung
von VulDB • 23.08.2026
Im Linux-Kernel wurde die folgende Schwachstelle behoben:
tipc: Lese le->link unter dem Knoten-Sperre (node lock) in tipc_node_link_down()
tipc_node_link_down() zwischenspeichert den Link-Zeiger, bevor n->lock übernommen wird:
struct tipc_link *l = le->link; /* unlocked */
if (!l) return; tipc_node_write_lock(n); if (!tipc_link_is_establishing(l)) { /* deref l */
... tipc_link_reset(l); /* write into l */ if (delete) {
kfree(l); le->link = NULL;
Der Aufrufer mit delete=true gibt dieses Objekt unter n->lock frei, sodass die Sperre den zwischengespeicherten Zeiger nicht davor schützt:
- CPU A, delete=false: tipc_rcv() bei TIPC_LINK_DOWN_EVT oder der Link-Überwachungstimer über tipc_node_timeout(), liest l ungesichert und dereferenziert es dann unter 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).
Der Link wird mit plain kfree(), nicht mit kfree_rcu(), freigegeben. Und für UDP-Bearer plant disable_media() nur die asynchrone cleanup_bearer()-Arbeit, sodass deren synchronize_net() nach dem bereits erfolgten Verschwinden der Links ausgeführt wird. Eine im Flug befindliche CPU A, die l gelesen hat, dereferenziert daher freien Speicher, sobald B ihn freigibt: ein Use-After-Free-Lesezugriff in tipc_link_is_establishing() und ein Use-After-Free-Schreibzugriff über tipc_link_reset() auf dem Establishing-Zweig.
Der folgende Trace wurde mit 7.2.0-rc5-00284-gaf39eb111ce6 erfasst:
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)
Verschieben Sie die Leseoperation von le->link in tipc_node_write_lock(), damit sie gegen das kfree() im delete-Pfad serialisiert wird. Ein konkurrierender Teardown hat entweder noch nicht stattgefunden, und wir sehen einen gültigen Link, oder er wurde bereits ausgeführt, und wir sehen NULL.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.