{"id":15034,"date":"2026-09-04T19:02:22","date_gmt":"2026-09-04T11:02:22","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64045"},"modified":"2026-09-04T19:02:22","modified_gmt":"2026-09-04T11:02:22","slug":"cve-2026-64045","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64045","title":{"rendered":"CVE-2026-64045 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\novpn: tcp &#8211; use cache"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ovpn: tcp &#8211; use cached peer pointer in ovpn_tcp_close()<\/p>\n<p>ovpn_tcp_close() loads the ovpn_socket via rcu_dereference_sk_user_data()<br \/>\nunder rcu_read_lock(), takes a reference on sock-&gt;peer, caches the peer<br \/>\npointer in a local, and drops the read lock. It then passes sock-&gt;peer<br \/>\n(rather than the cached local) to ovpn_peer_del(), re-dereferencing the<br \/>\novpn_socket after the RCU read section has ended.<\/p>\n<p>Unlike ovpn_tcp_sendmsg(), which uses the same &#8220;load under RCU, use<br \/>\nafter unlock&#8221; pattern but is protected by lock_sock() held across the<br \/>\nfunction, ovpn_tcp_close() runs without the socket lock: inet_release()<br \/>\ninvokes sk_prot-&gt;close() without taking lock_sock first.<\/p>\n<p>ovpn_socket_release() can therefore complete its kref_put -&gt; detach -&gt;<br \/>\nsynchronize_rcu -&gt; kfree(sock) sequence concurrently, in the window<br \/>\nafter ovpn_tcp_close() drops rcu_read_lock() but before it dereferences<br \/>\nsock-&gt;peer. The synchronize_rcu() in ovpn_socket_release() protects<br \/>\nreaders that use the dereferenced pointer inside the RCU read section,<br \/>\nnot those that escape the pointer to a local and use it afterwards.<\/p>\n<p>A reproducer follows the pattern of commit 94560267d6c4 (&#8220;ovpn: tcp &#8211;<br \/>\ndon&#8217;t deref NULL sk_socket member after tcp_close()&#8221;): trigger a peer<br \/>\nremoval (keepalive expiration or netlink OVPN_CMD_DEL_PEER) at the same<br \/>\nmoment userspace closes the TCP fd. That commit fixed the detach-side<br \/>\nof the same race window; this one fixes the close-side at a different<br \/>\nvictim.<\/p>\n<p>Tighten the entry block to read sock-&gt;peer exactly once into the cached<br \/>\npeer local, and route all subsequent uses (the hold check, the<br \/>\novpn_peer_del() call, and the prot-&gt;close() invocation) through that<br \/>\nlocal. sock-&gt;peer is only ever written once in ovpn_socket_new() under<br \/>\nlock_sock(), before rcu_assign_sk_user_data() publishes the ovpn_socket,<br \/>\nand is never reassigned afterwards &#8211; but the previous multi-read pattern<br \/>\nmade that invariant implicit rather than explicit. The same multi-read<br \/>\nshape exists in ovpn_tcp_recvmsg(), ovpn_tcp_sendmsg(),<br \/>\novpn_tcp_data_ready() and ovpn_tcp_write_space(); those will be cleaned<br \/>\nup via a dedicated helper in a follow-up net-next series.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ovpn: tcp &#8211; use cached peer pointer in ovpn_tcp_close()<\/p>\n<p>ovpn_tcp_close() loads the ovpn_socket via rcu_dereference_sk_user_data()<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-15034","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/15034","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=15034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}