{"id":7047,"date":"2026-09-04T18:49:24","date_gmt":"2026-09-04T10:49:24","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72404"},"modified":"2026-09-04T18:49:24","modified_gmt":"2026-09-04T10:49:24","slug":"cve-2026-72404","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72404","title":{"rendered":"CVE-2026-72404 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ntipc: fix UAF in clea"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tipc: fix UAF in cleanup_bearer() due to premature dst_cache_destroy()<\/p>\n<p>TIPC UDP media bearer teardown calls dst_cache_destroy() on its<br \/>\nreplicast caches before calling synchronize_net() to wait for<br \/>\nconcurrent RCU readers (transmitters) to finish:<\/p>\n<p>static void cleanup_bearer(struct work_struct *work)<br \/>\n{<br \/>\n&#8230;<br \/>\n\tlist_for_each_entry_safe(rcast, tmp, &amp;ub-&gt;rcast.list, list) {<br \/>\n\t\tdst_cache_destroy(&amp;rcast-&gt;dst_cache);<br \/>\n\t\tlist_del_rcu(&amp;rcast-&gt;list);<br \/>\n\t\tkfree_rcu(rcast, rcu);<br \/>\n\t}<br \/>\n&#8230;<br \/>\n\tdst_cache_destroy(&amp;ub-&gt;rcast.dst_cache);<br \/>\n\tudp_tunnel_sock_release(ub-&gt;sk);<br \/>\n\tsynchronize_net();<br \/>\n&#8230;<br \/>\n}<\/p>\n<p>This is highly buggy because dst_cache_destroy() immediately frees the<br \/>\nper-CPU cache memory (free_percpu()) and releases the cached dst<br \/>\nentries without any synchronization.<\/p>\n<p>If a concurrent transmitter (e.g., tipc_udp_xmit()) is running on another<br \/>\nCPU under RCU protection, it can call dst_cache_get() concurrently,<br \/>\nleading to:<br \/>\n1. Use-After-Free on the per-CPU cache pointer itself (crash).<br \/>\n2. &#8220;rcuref &#8211; imbalanced put()&#8221; warning if it attempts to release a<br \/>\n   dst that was concurrently released by dst_cache_destroy().<\/p>\n<p>Furthermore, calling kfree(ub) immediately after synchronize_net() without<br \/>\nclosing the socket first (or waiting after closing it) leaves a window<br \/>\nwhere a concurrent receiver (tipc_udp_recv()) could start after<br \/>\nsynchronize_net(), access ub, and suffer a UAF when kfree(ub) runs.<\/p>\n<p>To fix this, we must defer dst_cache_destroy() and kfree(ub) until after<br \/>\nwe have ensured that no more readers can see the bearer\/socket and all<br \/>\nexisting readers have finished:<\/p>\n<p>1. Defer rcast entry destruction (both dst_cache_destroy() and kfree())<br \/>\n   to an RCU callback using call_rcu_hurry().<br \/>\n   Using call_rcu_hurry() ensures the dst entries are released quickly.<\/p>\n<p>2. Release the bearer socket using udp_tunnel_sock_release() (stops<br \/>\n   new receive readers).<\/p>\n<p>3. Call synchronize_net() to wait for all outstanding RCU readers<br \/>\n   (both transmit and receive) to finish.<\/p>\n<p>4. Now that it is safe, call dst_cache_destroy() on the main bearer<br \/>\n   cache, and free ub.<\/p>\n<p>Note: 3) and 4) can be changed later in net-next to also use<br \/>\ncall_rcu_hurry() and get rid of the synchronize_net() latency.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tipc: fix UAF in cleanup_bearer() due to premature dst_cache_destroy()<\/p>\n<p>TIPC UDP media bearer teardown calls dst_cache_destroy() on<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-7047","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/7047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}