CVE-2026-46135: nvmet-tcp: fix race between ICReq handling and queue teardown
In the Linux kernel, the following vulnerability has been resolved:
nvmet-tcp: fix race between ICReq handling and queue teardown
nvmet_tcp_handle_icreq() updates queue->state after sending an
Initialization Connection Response (ICResp), but it does so without
serializing against target-side queue teardown.
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->state to NVMET_TCP_Q_DISCONNECTING and drops the queue
reference under state_lock.
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.
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.
Fix this by serializing both post-send state transitions with
state_lock and bailing out if teardown has already started.
Use -ESHUTDOWN as an internal sentinel for that bail-out path rather
than propagating it as a transport error like -ECONNRESET. Keep
nvmet_tcp_socket_error() setting rcv_state to NVMET_TCP_RECV_ERR before
honoring that sentinel so receive-side parsing stays quiesced until the
existing release path completes.
Security readout for executives and security teams
Plain-English summary
A remotely reachable NVMe/TCP target can mishandle a connection that closes during initialization. Competing cleanup paths may release the same kernel queue twice, potentially causing a crash, memory corruption, or broader system compromise. Systems not providing Linux NVMe/TCP target services are unlikely to be exposed through this flaw.
Executive priority
Prioritize urgently for reachable storage targets because failure occurs in kernel context and the supplied severity is critical. First identify systems providing NVMe/TCP target services; then patch exposed targets or isolate them to trusted storage networks. Do not assume fleet-wide exposure solely because Linux is installed.
Technical view
A race between buffered ICReq processing and softirq-context queue teardown lets nvmet_tcp_handle_icreq() overwrite NVMET_TCP_Q_DISCONNECTING with LIVE or FAILED. This defeats the teardown guard and permits a second kref_put() on an already released queue. The fix serializes post-send state transitions under state_lock and uses an internal -ESHUTDOWN sentinel when teardown has begun.
Likely exposure
Exposure requires an affected Linux kernel operating as an NVMe/TCP target with its service reachable by an untrusted host. The supplied version data is ambiguous and should not be treated as a reliable fixed-version matrix. Confirm exposure using the running distribution kernel package and applicable stable fix commit.
Exploitation context
The CVSS 3.1 assessment is 9.8, network-accessible, low complexity, unauthenticated, and requires no user interaction. However, the bundle marks KEV false and provides no evidence of exploitation in the wild or a public exploit. Treat exploitation status as unconfirmed.
Researcher notes
The vulnerable condition depends on precise ordering between ICReq work processing, socket closure, and queue release. The supplied record describes double reference release but provides no demonstrated impact, exploit, or attack prevalence. Version entries appear insufficiently structured for exact branch-level conclusions; use the eight linked stable commits and distribution backport records for authoritative mapping.
Mitigation direction
Install a vendor kernel update containing the applicable stable nvmet-tcp fix.
Consult Linux distribution guidance to map the fix to supported kernel packages.
Restrict NVMe/TCP target access to explicitly trusted storage-network hosts.
Disable the NVMe/TCP target service where it is unnecessary.
Validation and detection
Determine whether nvmet-tcp target functionality is enabled on each Linux system.
Identify NVMe/TCP listeners and verify which network segments can reach them.
Record the running kernel and distribution package versions.
Compare kernel provenance against vendor advisories or the applicable stable fix commit.
Monitor target systems for unexplained kernel crashes or nvmet-tcp errors.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2026-46135 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
0ADP providers
9Source links
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.