{"id":11291,"date":"2026-09-04T18:53:08","date_gmt":"2026-09-04T10:53:08","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74727"},"modified":"2026-09-04T18:53:08","modified_gmt":"2026-09-04T10:53:08","slug":"cve-2026-74727","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-74727","title":{"rendered":"CVE-2026-74727 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\novpn: skip rehash for"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ovpn: skip rehash for peers already removed from by_id<\/p>\n<p>ovpn_nl_peer_set_doit() resolves the target peer via<br \/>\novpn_peer_get_by_id() before taking ovpn-&gt;lock. In the window between<br \/>\nthe lookup (which only takes a refcount) and the subsequent<br \/>\nspin_lock_bh(&amp;ovpn-&gt;lock), a concurrent OVPN_CMD_PEER_DEL, keepalive<br \/>\nexpiry, or socket teardown can take ovpn-&gt;lock first, run<br \/>\novpn_peer_remove() to unhash the peer from all four tables (by_id,<br \/>\nby_vpn_addr4\/6, by_transp_addr) and release the lock. set_doit then<br \/>\nacquires ovpn-&gt;lock and calls ovpn_peer_hash_vpn_ip(), which<br \/>\nre-inserts the now-removed peer back into the rehashing tables.<\/p>\n<p>The same race affects the float path: ovpn_peer_endpoints_update()<br \/>\nholds only a refcount and acquires ovpn-&gt;lock very late (after async<br \/>\nAEAD decrypt and a netlink notification), then rehashes the peer<br \/>\nin the by_transp_addr table.<\/p>\n<p>The resurrected peer becomes reachable again from the RX lookup<br \/>\n(ovpn_peer_get_by_transp_addr) and the TX VPN-IP lookup, even though<br \/>\nuserspace believes it is gone. Once the data-path refcount drops the<br \/>\npeer is freed via call_rcu while the hash entries embedded in it<br \/>\nremain linked, opening a UAF window.<\/p>\n<p>Bail out of the rehash when hash_entry_id is unhashed, mirroring<br \/>\nthe sentinel already used by ovpn_peer_remove() to detect the<br \/>\nalready-removed state. The check is safe under ovpn-&gt;lock, which<br \/>\nserializes every mutation of hash_entry_id, and is a no-op for the<br \/>\nadd path because ovpn_peer_add_mp() inserts hash_entry_id before<br \/>\ncalling ovpn_peer_hash_vpn_ip().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ovpn: skip rehash for peers already removed from by_id<\/p>\n<p>ovpn_nl_peer_set_doit() resolves the target peer via<br \/>\novpn_peer_get_by_id() <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-11291","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/11291","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=11291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}