<?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 15:15:25 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-97993 — vhost-vdpa: don't install the eventfd_ctx_fdget() error in config_ctx</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-97993</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;vhost-vdpa: don&amp;#39;t install the eventfd_ctx_fdget() error in config_ctx&lt;/p&gt;
&lt;p&gt;vhost_vdpa_set_config_call() swaps the eventfd_ctx_fdget() return value
into v-&amp;gt;config_ctx before checking it, so on failure the field briefly
holds an ERR_PTR:&lt;/p&gt;
&lt;p&gt;ctx = fd == VHOST_FILE_UNBIND ? NULL : eventfd_ctx_fdget(fd);
	swap(ctx, v-&amp;gt;config_ctx);&lt;/p&gt;
&lt;p&gt;if (!IS_ERR_OR_NULL(ctx))
		eventfd_ctx_put(ctx);&lt;/p&gt;
&lt;p&gt;if (IS_ERR(v-&amp;gt;config_ctx)) {
		long ret = PTR_ERR(v-&amp;gt;config_ctx);&lt;/p&gt;
&lt;p&gt;v-&amp;gt;config_ctx = NULL;
		return ret;
	}&lt;/p&gt;
&lt;p&gt;Commit 0bde59c1723a (&amp;#34;vhost-vdpa: set v-&amp;gt;config_ctx to NULL if
eventfd_ctx_fdget() fails&amp;#34;) added that clearing, and spelled out the
invariant the rest of the file relies on: &amp;#34;we consider &amp;#39;v-&amp;gt;config_ctx&amp;#39;
valid if it is not NULL&amp;#34;.  The window between the swap and the clearing
still breaks it.  vhost_vdpa_config_cb() only tests for NULL, so a config
interrupt delivered inside the window hands the ERR_PTR to
eventfd_signal().&lt;/p&gt;
&lt;p&gt;Check the fd before installing it instead.  That closes the window and
matches how vhost_vring_ioctl() handles the same failure for the vq call
fd.&lt;/p&gt;
&lt;p&gt;It also stops a rejected fd from tearing down a config interrupt that was
working: until now the swap replaced the live context and put it, so
after an EBADF the device silently stopped delivering config interrupts
until userspace installed a new fd.&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;vhost-vdpa: don&amp;#39;t install the eventfd_ctx_fdget() error in config_ctx&lt;/p&gt;
&lt;p&gt;vhost_vdpa_set_config_call() swaps the eventfd_ctx_fdget() return value
into v-&amp;gt;config_ctx before checking it, so on failure the field briefly
holds an ERR_PTR:&lt;/p&gt;
&lt;p&gt;ctx = fd == VHOST_FILE_UNBIND ? NULL : eventfd_ctx_fdget(fd);
	swap(ctx, v-&amp;gt;config_ctx);&lt;/p&gt;
&lt;p&gt;if (!IS_ERR_OR_NULL(ctx))
		eventfd_ctx_put(ctx);&lt;/p&gt;
&lt;p&gt;if (IS_ERR(v-&amp;gt;config_ctx)) {
		long ret = PTR_ERR(v-&amp;gt;config_ctx);&lt;/p&gt;
&lt;p&gt;v-&amp;gt;config_ctx = NULL;
		return ret;
	}&lt;/p&gt;
&lt;p&gt;Commit 0bde59c1723a (&amp;#34;vhost-vdpa: set v-&amp;gt;config_ctx to NULL if
eventfd_ctx_fdget() fails&amp;#34;) added that clearing, and spelled out the
invariant the rest of the file relies on: &amp;#34;we consider &amp;#39;v-&amp;gt;config_ctx&amp;#39;
valid if it is not NULL&amp;#34;.  The window between the swap and the clearing
still breaks it.  vhost_vdpa_config_cb() only tests for NULL, so a config
interrupt delivered inside the window hands the ERR_PTR to
eventfd_signal().&lt;/p&gt;
&lt;p&gt;Check the fd before installing it instead.  That closes the window and
matches how vhost_vring_ioctl() handles the same failure for the vq call
fd.&lt;/p&gt;
&lt;p&gt;It also stops a rejected fd from tearing down a config interrupt that was
working: until now the swap replaced the live context and put it, so
after an EBADF the device silently stopped delivering config interrupts
until userspace installed a new fd.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-97993</guid>
    </item>
  </channel>
</rss>
