<?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>Thu, 01 Oct 2026 07:46:49 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-46135 — nvmet-tcp: fix race between ICReq handling and queue teardown</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-46135</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;nvmet-tcp: fix race between ICReq handling and queue teardown&lt;/p&gt;
&lt;p&gt;nvmet_tcp_handle_icreq() updates queue-&amp;gt;state after sending an
Initialization Connection Response (ICResp), but it does so without
serializing against target-side queue teardown.&lt;/p&gt;
&lt;p&gt;If an NVMe/TCP host sends an Initialization Connection Request
(ICReq) and immediately closes the connection, target-side teardown
may start in softirq context before io_work drains the already
buffered ICReq. In that case, nvmet_tcp_schedule_release_queue()
sets queue-&amp;gt;state to NVMET_TCP_Q_DISCONNECTING and drops the queue
reference under state_lock.&lt;/p&gt;
&lt;p&gt;If io_work later processes that ICReq, nvmet_tcp_handle_icreq() can
still overwrite the state back to NVMET_TCP_Q_LIVE. That defeats the
DISCONNECTING-state guard in nvmet_tcp_schedule_release_queue() and
allows a later socket state change to re-enter teardown and issue a
second kref_put() on an already released queue.&lt;/p&gt;
&lt;p&gt;The ICResp send failure path has the same problem. If teardown has
already moved the queue to DISCONNECTING, a send error can still
overwrite the state with NVMET_TCP_Q_FAILED, again reopening the
window for a second teardown path to drop the queue reference.&lt;/p&gt;
&lt;p&gt;Fix this by serializing both post-send state transitions with
state_lock and bailing out if teardown has already started.&lt;/p&gt;
&lt;p&gt;Use -ESHUTDOWN as an internal sentinel for that bail-out path rather
than propagating it as a transport error like -ECONNRESET…&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;nvmet-tcp: fix race between ICReq handling and queue teardown&lt;/p&gt;
&lt;p&gt;nvmet_tcp_handle_icreq() updates queue-&amp;gt;state after sending an
Initialization Connection Response (ICResp), but it does so without
serializing against target-side queue teardown.&lt;/p&gt;
&lt;p&gt;If an NVMe/TCP host sends an Initialization Connection Request
(ICReq) and immediately closes the connection, target-side teardown
may start in softirq context before io_work drains the already
buffered ICReq. In that case, nvmet_tcp_schedule_release_queue()
sets queue-&amp;gt;state to NVMET_TCP_Q_DISCONNECTING and drops the queue
reference under state_lock.&lt;/p&gt;
&lt;p&gt;If io_work later processes that ICReq, nvmet_tcp_handle_icreq() can
still overwrite the state back to NVMET_TCP_Q_LIVE. That defeats the
DISCONNECTING-state guard in nvmet_tcp_schedule_release_queue() and
allows a later socket state change to re-enter teardown and issue a
second kref_put() on an already released queue.&lt;/p&gt;
&lt;p&gt;The ICResp send failure path has the same problem. If teardown has
already moved the queue to DISCONNECTING, a send error can still
overwrite the state with NVMET_TCP_Q_FAILED, again reopening the
window for a second teardown path to drop the queue reference.&lt;/p&gt;
&lt;p&gt;Fix this by serializing both post-send state transitions with
state_lock and bailing out if teardown has already started.&lt;/p&gt;
&lt;p&gt;Use -ESHUTDOWN as an internal sentinel for that bail-out path rather
than propagating it as a transport error like -ECONNRESET…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-46135</guid>
    </item>
  </channel>
</rss>
