CVE-2025-38209: nvme-tcp: remove tag set when second admin queue config fails
In the Linux kernel, the following vulnerability has been resolved:
nvme-tcp: remove tag set when second admin queue config fails
Commit 104d0e2f6222 ("nvme-fabrics: reset admin connection for secure
concatenation") modified nvme_tcp_setup_ctrl() to call
nvme_tcp_configure_admin_queue() twice. The first call prepares for
DH-CHAP negotitation, and the second call is required for secure
concatenation. However, this change triggered BUG KASAN slab-use-after-
free in blk_mq_queue_tag_busy_iter(). This BUG can be recreated by
repeating the blktests test case nvme/063 a few times [1].
When the BUG happens, nvme_tcp_create_ctrl() fails in the call chain
below:
nvme_tcp_create_ctrl()
nvme_tcp_alloc_ctrl() new=true ... Alloc nvme_tcp_ctrl and admin_tag_set
nvme_tcp_setup_ctrl() new=true
nvme_tcp_configure_admin_queue() new=true ... Succeed
nvme_alloc_admin_tag_set() ... Alloc the tag set for admin_tag_set
nvme_stop_keep_alive()
nvme_tcp_teardown_admin_queue() remove=false
nvme_tcp_configure_admin_queue() new=false
nvme_tcp_alloc_admin_queue() ... Fail, but do not call nvme_remove_admin_tag_set()
nvme_uninit_ctrl()
nvme_put_ctrl() ... Free up the nvme_tcp_ctrl and admin_tag_set
The first call of nvme_tcp_configure_admin_queue() succeeds with
new=true argument. The second call fails with new=false argument. This
second call does not call nvme_remove_admin_tag_set() on failure, due to
the new=false argument. Then the admin tag set is not removed. However,
nvme_tcp_create_ctrl() assumes that nvme_tcp_setup_ctrl() would call
nvme_remove_admin_tag_set(). Then it frees up struct nvme_tcp_ctrl which
has admin_tag_set field. Later on, the timeout handler accesses the
admin_tag_set field and causes the BUG KASAN slab-use-after-free.
To not leave the admin tag set, call nvme_remove_admin_tag_set() when
the second nvme_tcp_configure_admin_queue() call fails. Do not return
from nvme_tcp_setup_ctrl() on failure. Instead, jump to "destroy_admin"
go-to label to call nvme_tcp_teardown_admin_queue() which calls
nvme_remove_admin_tag_set().
Security readout for executives and security teams
Plain-English summary
A Linux NVMe-over-TCP cleanup error can leave storage-management data pointing to freed memory when a second administrative queue setup fails. A later timeout can access that memory, producing a kernel bug and potentially disrupting affected storage hosts. The supplied record rates it critical, although the public evidence demonstrates a use-after-free rather than practical compromise.
Executive priority
Treat affected NVMe/TCP storage infrastructure as an urgent patching item because a kernel memory-safety failure could interrupt storage availability. Prioritize exposed and business-critical hosts, but do not infer confirmed remote takeover from the 9.8 score alone; the supplied evidence does not establish active exploitation or reliable attacker control.
Technical view
After the first administrative queue configuration succeeds, a second configuration attempt used for secure concatenation can fail without removing the administrative tag set. Controller cleanup then frees the containing nvme_tcp_ctrl. A later timeout handler accesses its stale admin_tag_set field, causing a KASAN-detected slab use-after-free. The fix routes failure through teardown that removes the tag set.
Likely exposure
Exposure is limited to Linux systems using the NVMe/TCP controller path containing introducing commit 104d0e2f6222, particularly where DH-CHAP and secure-concatenation queue reconfiguration occurs. The bundle lists Linux 6.15, 6.15.4, and 6.16, but packaged kernels may contain backports, so version numbers alone are insufficient.
Exploitation context
The bundle reports no CISA KEV listing and provides no evidence of active exploitation or a public weaponized exploit. The bug was reproduced by repeatedly running blktests nvme/063. Whether an unauthenticated network attacker can reliably trigger or control the freed memory is not established by these sources.
Researcher notes
The important precondition is failure of the second nvme_tcp_configure_admin_queue call with new=false after initial tag-set allocation. The missing removal leaves timeout processing with a dangling reference. Public evidence supports reproducible use-after-free and likely denial of service; confidentiality and integrity impact, trigger reachability from an untrusted network, and exploitation reliability remain unproven.
Mitigation direction
Apply a vendor kernel update containing one of the referenced stable fixes after confirming applicability.
Prioritize NVMe/TCP storage hosts whose kernels include introducing commit 104d0e2f6222.
Check distribution advisories for backported fixes; package versions may not match upstream numbering.
Follow vendor guidance if an updated kernel is not yet available.
Validation and detection
Inventory systems using NVMe/TCP and record their exact kernel builds.
Compare kernel source or backport history against the introducing and fixing commits.
Confirm the updated kernel contains teardown logic that removes the administrative tag set on second-configuration failure.
Review kernel logs for KASAN use-after-free reports, NVMe/TCP controller failures, or timeout-related crashes.
Regression-test NVMe/TCP authentication and reconnection failure handling in a controlled environment.
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-2025-38209 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
3Source 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.