<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 04:22:03 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64044 — ovpn: respect peer refcount in CMD_NEW_PEER error path</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64044</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;ovpn: respect peer refcount in CMD_NEW_PEER error path&lt;/p&gt;
&lt;p&gt;ovpn_nl_peer_new_doit()&amp;#39;s error path calls ovpn_peer_release() directly
rather than ovpn_peer_put(), bypassing the kref. The accompanying
comment (&amp;#34;peer was not yet hashed, thus it is not used in any context&amp;#34;)
holds for UDP but not for TCP.&lt;/p&gt;
&lt;p&gt;For UDP, the ovpn_socket union uses the .ovpn arm and never points back
at a peer; UDP encap_recv looks up peers via the not-yet-populated
hashtables, so the new peer is unreachable until ovpn_peer_add()
publishes it.&lt;/p&gt;
&lt;p&gt;For TCP, ovpn_socket_new() sets ovpn_sock-&amp;gt;peer and
ovpn_tcp_socket_attach() publishes ovpn_sock via rcu_assign_sk_user_data().
From that moment until ovpn_socket_release() detaches in the error path,
the TCP fd is fully wired: userspace recvmsg / sendmsg / close / poll
on the fd, as well as the strparser-driven ovpn_tcp_rcv() path, can
reach the peer through sk_user_data -&amp;gt; ovpn_sock-&amp;gt;peer and bump its
refcount via ovpn_peer_hold().&lt;/p&gt;
&lt;p&gt;ovpn_tcp_socket_wait_finish() (called inside ovpn_socket_release())
drains strparser and the tx work, but does not synchronize with
userspace syscall callers that already hold a peer reference. If
ovpn_nl_peer_modify() or ovpn_peer_add() returns an error while such
a caller is in flight - notably an ovpn_tcp_recvmsg() blocked in
__skb_recv_datagram() on peer-&amp;gt;tcp.user_queue - the direct
ovpn_peer_release() destroys the peer while the caller still holds
the reference, an…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;ovpn: respect peer refcount in CMD_NEW_PEER error path&lt;/p&gt;
&lt;p&gt;ovpn_nl_peer_new_doit()&amp;#39;s error path calls ovpn_peer_release() directly
rather than ovpn_peer_put(), bypassing the kref. The accompanying
comment (&amp;#34;peer was not yet hashed, thus it is not used in any context&amp;#34;)
holds for UDP but not for TCP.&lt;/p&gt;
&lt;p&gt;For UDP, the ovpn_socket union uses the .ovpn arm and never points back
at a peer; UDP encap_recv looks up peers via the not-yet-populated
hashtables, so the new peer is unreachable until ovpn_peer_add()
publishes it.&lt;/p&gt;
&lt;p&gt;For TCP, ovpn_socket_new() sets ovpn_sock-&amp;gt;peer and
ovpn_tcp_socket_attach() publishes ovpn_sock via rcu_assign_sk_user_data().
From that moment until ovpn_socket_release() detaches in the error path,
the TCP fd is fully wired: userspace recvmsg / sendmsg / close / poll
on the fd, as well as the strparser-driven ovpn_tcp_rcv() path, can
reach the peer through sk_user_data -&amp;gt; ovpn_sock-&amp;gt;peer and bump its
refcount via ovpn_peer_hold().&lt;/p&gt;
&lt;p&gt;ovpn_tcp_socket_wait_finish() (called inside ovpn_socket_release())
drains strparser and the tx work, but does not synchronize with
userspace syscall callers that already hold a peer reference. If
ovpn_nl_peer_modify() or ovpn_peer_add() returns an error while such
a caller is in flight - notably an ovpn_tcp_recvmsg() blocked in
__skb_recv_datagram() on peer-&amp;gt;tcp.user_queue - the direct
ovpn_peer_release() destroys the peer while the caller still holds
the reference, an…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64044</guid>
    </item>
  </channel>
</rss>
