{"id":17353,"date":"2026-09-05T02:31:01","date_gmt":"2026-09-04T18:31:01","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80849"},"modified":"2026-09-05T02:31:01","modified_gmt":"2026-09-04T18:31:01","slug":"cve-2026-80849","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80849","title":{"rendered":"CVE-2026-80849 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet\/tcp-ao: fix use-a"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/tcp-ao: fix use-after-free of current_key on reconnect to another peer<\/p>\n<p>tcp_inbound_ao_hash() is called before bh_lock_sock_nested() is taken,<br \/>\nwith only rcu_read_lock() held. On the fast path for established<br \/>\nsockets, if the rnext_keyid sent by the peer differs from<br \/>\ncurrent_key-&gt;sndid, the key the peer asked for is looked up and stored<br \/>\nin current_key. The lookup is inside the RCU read side, but current_key<br \/>\noutlives it.<\/p>\n<p>When the socket is disconnected and connect() is called again for<br \/>\nanother peer, tcp_ao_connect_init() unlinks every key that does not<br \/>\nmatch the new peer and frees it with call_rcu(). If current_key points<br \/>\nat such a key, it is cleared to NULL.<\/p>\n<p>The fast path reads sk_state only once on entry, so a softirq that got<br \/>\ninto it while the socket was still established can update current_key<br \/>\nafter that loop has already run. The update is inside the RCU read side,<br \/>\nso it comes before the call_rcu() callback, and once the callback frees<br \/>\nthe key, current_key is left pointing at freed memory.<\/p>\n<p>The next transmission picks that pointer up in tcp_get_current_key().<br \/>\ntcp_ao_transmit_skb() then reads the traffic key from the freed object,<br \/>\nwhich is the use-after-free.<\/p>\n<p>Wait for one grace period before unlinking, and only if a key is going<br \/>\nto be removed. By the time tcp_connect() runs the socket is already in<br \/>\nTCP_SYN_SENT, and TCP_AO_ESTABLISHED does not contain TCPF_SYN_SENT, so<br \/>\na softirq entering after the wait cannot reach the fast path, and the<br \/>\nones already in it have finished. The existing NULL handling in the loop<br \/>\nis then enough.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/tcp-ao: fix use-after-free of current_key on reconnect to another peer<\/p>\n<p>tcp_inbound_ao_hash() is called before bh_lock_sock_nes<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17353","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17353","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=17353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}