<?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://db.gcve.eu</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>Thu, 12 Nov 2026 16:04:40 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-99228 — io_uring/io-wq: don't lose the signal that ends work</title>
      <link>https://db.gcve.eu/vuln/cve-2026-99228</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;io_uring/io-wq: don&amp;#39;t lose the signal that ends work&lt;/p&gt;
&lt;p&gt;When a thread exits, only its tracked requests are cancelled. Then its
io-wq is torn down. io_wq_exit_workers() signals every worker, to get it
out of an interruptible sleep, and waits for all of them to exit. Before
they do, they go through the work that is left. Unbounded work is
cancelled. Bounded work is run, as it is expected to end by itself.&lt;/p&gt;
&lt;p&gt;Not all of it does. An open has no file yet, so it counts as bounded, and
the open of a FIFO waits for the other end. That is what the signal is for.
But the workers are signalled once, and a worker that hasn&amp;#39;t started the
work by then loses the signal:&lt;/p&gt;
&lt;p&gt;io_wq_exit_workers()               io_worker_handle_work()
    io_wq_worker_wake()
      set TIF_NOTIFY_SIGNAL
                                       io_assign_current_work()
                                         io_run_task_work()
                                           clear TIF_NOTIFY_SIGNAL
                                       io_wq_submit_work()
                                         fifo_open()
                                           wait_for_partner()
    wait_for_completion_timeout()&lt;/p&gt;
&lt;p&gt;The thread never gets out of do_exit():&lt;/p&gt;
&lt;p&gt;IORING_OP_OPENAT of a FIFO without a writer, IOSQE_ASYNC
  exit of the thread that has submitted it&lt;/p&gt;
&lt;p&gt;hangs in more than 9 of 10 attempts (4 CPUs, KVM), until the process is
killed.&lt;/p&gt;
&lt;p&gt;Set TIF_NOTIFY_SIGNAL for bound…&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;io_uring/io-wq: don&amp;#39;t lose the signal that ends work&lt;/p&gt;
&lt;p&gt;When a thread exits, only its tracked requests are cancelled. Then its
io-wq is torn down. io_wq_exit_workers() signals every worker, to get it
out of an interruptible sleep, and waits for all of them to exit. Before
they do, they go through the work that is left. Unbounded work is
cancelled. Bounded work is run, as it is expected to end by itself.&lt;/p&gt;
&lt;p&gt;Not all of it does. An open has no file yet, so it counts as bounded, and
the open of a FIFO waits for the other end. That is what the signal is for.
But the workers are signalled once, and a worker that hasn&amp;#39;t started the
work by then loses the signal:&lt;/p&gt;
&lt;p&gt;io_wq_exit_workers()               io_worker_handle_work()
    io_wq_worker_wake()
      set TIF_NOTIFY_SIGNAL
                                       io_assign_current_work()
                                         io_run_task_work()
                                           clear TIF_NOTIFY_SIGNAL
                                       io_wq_submit_work()
                                         fifo_open()
                                           wait_for_partner()
    wait_for_completion_timeout()&lt;/p&gt;
&lt;p&gt;The thread never gets out of do_exit():&lt;/p&gt;
&lt;p&gt;IORING_OP_OPENAT of a FIFO without a writer, IOSQE_ASYNC
  exit of the thread that has submitted it&lt;/p&gt;
&lt;p&gt;hangs in more than 9 of 10 attempts (4 CPUs, KVM), until the process is
killed.&lt;/p&gt;
&lt;p&gt;Set TIF_NOTIFY_SIGNAL for bound…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-99228</guid>
    </item>
  </channel>
</rss>
