<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-11-05T22:31:21.467009+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/cve-2026-99231</id>
    <title>CVE-2026-99231 — io_uring/waitid: own the request before clearing -&gt;head</title>
    <updated>2026-11-05T22:31:21.475247+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Linux</p>
<p>In the Linux kernel, the following vulnerability has been resolved:</p>
<p>io_uring/waitid: own the request before clearing -&gt;head</p>
<p>io_waitid_remove_wq() only takes the wait queue lock if -&gt;head is set.
io_waitid_wait() clears -&gt;head first thing, before it tries to become the
owner of the request by bumping -&gt;refs. If somebody else owns the request
at that point, nothing keeps it from completing the request while the
wake up handler is still going to touch it:</p>
<p>CPU0 (io_waitid_wait)                 CPU1 (io_waitid, holds a ref)
list_del_init(&amp;wait-&gt;entry)
smp_store_release(&amp;iw-&gt;head, NULL)
                                      __do_wait() finds another child
                                      io_waitid_remove_wq()
                                        // -&gt;head == NULL, no locking
                                      io_waitid_finish(), IOU_COMPLETE
                                      // request freed and reused
atomic_fetch_inc(&amp;iw-&gt;refs)</p>
<p>The same goes for __io_waitid_cancel() if it claims the request in that
window. -&gt;refs is part of the per opcode data of the request, so this
increments whatever the next user of the request keeps there. If that
happens to be zero, the handler concludes that it owns the request, and
queues io_waitid_cb() for it. With the window held open by a delay, and
the request reused for a receive that is waiting for data:</p>
<p>BUG: KASAN: slab-use-after-free in __wake_up_common+0x1ca/0x1f0
   __wake_up_sync_key+0x36/0x50
   sock_def_readable+0xf1/0x…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/cve-2026-99231"/>
  </entry>
</feed>
