<?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>Tue, 29 Sep 2026 04:53:19 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-90138 — vsock: don't check the listener's sk_err in vsock_accept()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-90138</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;vsock: don&amp;#39;t check the listener&amp;#39;s sk_err in vsock_accept()&lt;/p&gt;
&lt;p&gt;Syzbot reported an issue which can be reproduced with these steps:
	r0 = socket(AF_VSOCK, SOCK_STREAM, 0)
	bind(r0, {VMADDR_CID_ANY, PORT})
	connect(r0, {VMADDR_CID_LOCAL, PORT}) -&amp;gt; -1, EPROTO (self-connect)
	listen(r0, backlog)                   -&amp;gt; 0
	r1 = socket(AF_VSOCK, SOCK_STREAM, 0)
	connect(r1, {VMADDR_CID_LOCAL, PORT}) -&amp;gt; 0
	accept(r0)                            -&amp;gt; -1, EPROTO (stale sk_err)&lt;/p&gt;
&lt;p&gt;Basically, it creates a socket (r0) and triggers a self-connect after
binding it. This self-connect fails with EPROTO because it loops back
to r0 while the socket is still in the TCP_SYN_SENT state, causing it
to be incorrectly dispatched to the connecting-client path. The
unexpected packet type encountered there sets sk_err to EPROTO.&lt;/p&gt;
&lt;p&gt;After that, it invokes a listen() call on the same socket. This
listen() call succeeds because the kernel&amp;#39;s listening path never
inspects or clears sk_err. Then, a new socket (r1) is created as a
normal client and connects to r0. However, vsock_accept() rejects this
incoming connection because the listener&amp;#39;s sk_err still holds the
EPROTO error from the earlier failed self-connect.&lt;/p&gt;
&lt;p&gt;This rejection causes the child socket created for r1&amp;#39;s connection to
never be freed on virtio or hyperv transports; only the VMCI transport
implements pending_work to revisit and clean up a rejected socket.&lt;/p&gt;
&lt;p&gt;For a non-blocking connect(), vso…&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;vsock: don&amp;#39;t check the listener&amp;#39;s sk_err in vsock_accept()&lt;/p&gt;
&lt;p&gt;Syzbot reported an issue which can be reproduced with these steps:
	r0 = socket(AF_VSOCK, SOCK_STREAM, 0)
	bind(r0, {VMADDR_CID_ANY, PORT})
	connect(r0, {VMADDR_CID_LOCAL, PORT}) -&amp;gt; -1, EPROTO (self-connect)
	listen(r0, backlog)                   -&amp;gt; 0
	r1 = socket(AF_VSOCK, SOCK_STREAM, 0)
	connect(r1, {VMADDR_CID_LOCAL, PORT}) -&amp;gt; 0
	accept(r0)                            -&amp;gt; -1, EPROTO (stale sk_err)&lt;/p&gt;
&lt;p&gt;Basically, it creates a socket (r0) and triggers a self-connect after
binding it. This self-connect fails with EPROTO because it loops back
to r0 while the socket is still in the TCP_SYN_SENT state, causing it
to be incorrectly dispatched to the connecting-client path. The
unexpected packet type encountered there sets sk_err to EPROTO.&lt;/p&gt;
&lt;p&gt;After that, it invokes a listen() call on the same socket. This
listen() call succeeds because the kernel&amp;#39;s listening path never
inspects or clears sk_err. Then, a new socket (r1) is created as a
normal client and connects to r0. However, vsock_accept() rejects this
incoming connection because the listener&amp;#39;s sk_err still holds the
EPROTO error from the earlier failed self-connect.&lt;/p&gt;
&lt;p&gt;This rejection causes the child socket created for r1&amp;#39;s connection to
never be freed on virtio or hyperv transports; only the VMCI transport
implements pending_work to revisit and clean up a rejected socket.&lt;/p&gt;
&lt;p&gt;For a non-blocking connect(), vso…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-90138</guid>
    </item>
  </channel>
</rss>
