<?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 07:30:00 +0000</lastBuildDate>
    <item>
      <title>CVE-2023-53531 — null_blk: fix poll request timeout handling</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2023-53531</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;null_blk: fix poll request timeout handling&lt;/p&gt;
&lt;p&gt;When doing io_uring benchmark on /dev/nullb0, it&amp;#39;s easy to crash the
kernel if poll requests timeout triggered, as reported by David. [1]&lt;/p&gt;
&lt;p&gt;BUG: kernel NULL pointer dereference, address: 0000000000000008
Workqueue: kblockd blk_mq_timeout_work
RIP: 0010:null_timeout_rq+0x4e/0x91
Call Trace:
 ? null_timeout_rq+0x4e/0x91
 blk_mq_handle_expired+0x31/0x4b
 bt_iter+0x68/0x84
 ? bt_tags_iter+0x81/0x81
 __sbitmap_for_each_set.constprop.0+0xb0/0xf2
 ? __blk_mq_complete_request_remote+0xf/0xf
 bt_for_each+0x46/0x64
 ? __blk_mq_complete_request_remote+0xf/0xf
 ? percpu_ref_get_many+0xc/0x2a
 blk_mq_queue_tag_busy_iter+0x14d/0x18e
 blk_mq_timeout_work+0x95/0x127
 process_one_work+0x185/0x263
 worker_thread+0x1b5/0x227&lt;/p&gt;
&lt;p&gt;This is indeed a race problem between null_timeout_rq() and null_poll().&lt;/p&gt;
&lt;p&gt;null_poll()				null_timeout_rq()
  spin_lock(&amp;amp;nq-&amp;gt;poll_lock)
  list_splice_init(&amp;amp;nq-&amp;gt;poll_list, &amp;amp;list)
  spin_unlock(&amp;amp;nq-&amp;gt;poll_lock)&lt;/p&gt;
&lt;p&gt;while (!list_empty(&amp;amp;list))
    req = list_first_entry()
    list_del_init()
    ...
    blk_mq_add_to_batch()
    // req-&amp;gt;rq_next = NULL
					spin_lock(&amp;amp;nq-&amp;gt;poll_lock)&lt;/p&gt;
&lt;p&gt;// rq-&amp;gt;queuelist-&amp;gt;next == NULL
					list_del_init(&amp;amp;rq-&amp;gt;queuelist)&lt;/p&gt;
&lt;p&gt;spin_unlock(&amp;amp;nq-&amp;gt;poll_lock)&lt;/p&gt;
&lt;p&gt;Fix these problems by setting requests state to MQ_RQ_COMPLETE under
nq-&amp;gt;poll_lock protection, in which null_timeout_rq() can safely detect
this race and early return.&lt;/p&gt;
&lt;p&gt;Note this patch…&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;null_blk: fix poll request timeout handling&lt;/p&gt;
&lt;p&gt;When doing io_uring benchmark on /dev/nullb0, it&amp;#39;s easy to crash the
kernel if poll requests timeout triggered, as reported by David. [1]&lt;/p&gt;
&lt;p&gt;BUG: kernel NULL pointer dereference, address: 0000000000000008
Workqueue: kblockd blk_mq_timeout_work
RIP: 0010:null_timeout_rq+0x4e/0x91
Call Trace:
 ? null_timeout_rq+0x4e/0x91
 blk_mq_handle_expired+0x31/0x4b
 bt_iter+0x68/0x84
 ? bt_tags_iter+0x81/0x81
 __sbitmap_for_each_set.constprop.0+0xb0/0xf2
 ? __blk_mq_complete_request_remote+0xf/0xf
 bt_for_each+0x46/0x64
 ? __blk_mq_complete_request_remote+0xf/0xf
 ? percpu_ref_get_many+0xc/0x2a
 blk_mq_queue_tag_busy_iter+0x14d/0x18e
 blk_mq_timeout_work+0x95/0x127
 process_one_work+0x185/0x263
 worker_thread+0x1b5/0x227&lt;/p&gt;
&lt;p&gt;This is indeed a race problem between null_timeout_rq() and null_poll().&lt;/p&gt;
&lt;p&gt;null_poll()				null_timeout_rq()
  spin_lock(&amp;amp;nq-&amp;gt;poll_lock)
  list_splice_init(&amp;amp;nq-&amp;gt;poll_list, &amp;amp;list)
  spin_unlock(&amp;amp;nq-&amp;gt;poll_lock)&lt;/p&gt;
&lt;p&gt;while (!list_empty(&amp;amp;list))
    req = list_first_entry()
    list_del_init()
    ...
    blk_mq_add_to_batch()
    // req-&amp;gt;rq_next = NULL
					spin_lock(&amp;amp;nq-&amp;gt;poll_lock)&lt;/p&gt;
&lt;p&gt;// rq-&amp;gt;queuelist-&amp;gt;next == NULL
					list_del_init(&amp;amp;rq-&amp;gt;queuelist)&lt;/p&gt;
&lt;p&gt;spin_unlock(&amp;amp;nq-&amp;gt;poll_lock)&lt;/p&gt;
&lt;p&gt;Fix these problems by setting requests state to MQ_RQ_COMPLETE under
nq-&amp;gt;poll_lock protection, in which null_timeout_rq() can safely detect
this race and early return.&lt;/p&gt;
&lt;p&gt;Note this patch…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2023-53531</guid>
    </item>
  </channel>
</rss>
