CVE-2026-46135
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
28/05/2026
Last modified:
30/05/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
nvmet-tcp: fix race between ICReq handling and queue teardown<br />
<br />
nvmet_tcp_handle_icreq() updates queue->state after sending an<br />
Initialization Connection Response (ICResp), but it does so without<br />
serializing against target-side queue teardown.<br />
<br />
If an NVMe/TCP host sends an Initialization Connection Request<br />
(ICReq) and immediately closes the connection, target-side teardown<br />
may start in softirq context before io_work drains the already<br />
buffered ICReq. In that case, nvmet_tcp_schedule_release_queue()<br />
sets queue->state to NVMET_TCP_Q_DISCONNECTING and drops the queue<br />
reference under state_lock.<br />
<br />
If io_work later processes that ICReq, nvmet_tcp_handle_icreq() can<br />
still overwrite the state back to NVMET_TCP_Q_LIVE. That defeats the<br />
DISCONNECTING-state guard in nvmet_tcp_schedule_release_queue() and<br />
allows a later socket state change to re-enter teardown and issue a<br />
second kref_put() on an already released queue.<br />
<br />
The ICResp send failure path has the same problem. If teardown has<br />
already moved the queue to DISCONNECTING, a send error can still<br />
overwrite the state with NVMET_TCP_Q_FAILED, again reopening the<br />
window for a second teardown path to drop the queue reference.<br />
<br />
Fix this by serializing both post-send state transitions with<br />
state_lock and bailing out if teardown has already started.<br />
<br />
Use -ESHUTDOWN as an internal sentinel for that bail-out path rather<br />
than propagating it as a transport error like -ECONNRESET. Keep<br />
nvmet_tcp_socket_error() setting rcv_state to NVMET_TCP_RECV_ERR before<br />
honoring that sentinel so receive-side parsing stays quiesced until the<br />
existing release path completes.
Impact
Base Score 3.x
9.80
Severity 3.x
CRITICAL



