Re: [PATCH v2] nvme-tcp: fix NULL queue->ctrl dereference on reconnect
From: Nilay Shroff
Date: Wed Oct 28 2026 - 02:23:02 EST
On 10/28/26 8:13 AM, Christian Aurich Zanettini Martins wrote:
Since commit 61b0ed3be81b ("nvme-tcp: parallelize I/O queue allocation
and startup"), a reconnect that gets more I/O queues than before grows
the tag set before the new queues are allocated. queue->ctrl is only
set by nvme_tcp_alloc_queue(), so I/O submitted in between reaches
nvme_tcp_queue_rq() on a queue that was never allocated and
dereferences a NULL queue->ctrl:
BUG: kernel NULL pointer dereference, address: 00000000000002ac
RIP: 0010:nvme_tcp_queue_rq+0x33/0x3b0
Add nvme_tcp_init_queue() for the queue fields that do not depend on
the connection and call it for every queue when allocating the
controller. Such requests are then requeued like on any other queue
that is not live. send_mutex and io_work move there as well, and the
helper's mutexes are all destroyed when the controller is freed, like
queue_lock already is.
Fixes: 61b0ed3be81b ("nvme-tcp: parallelize I/O queue allocation and startup")
Suggested-by: Keith Busch<kbusch@xxxxxxxxxx>
Signed-off-by: Christian Aurich Zanettini Martins<christian.aurichzm@xxxxxxxxx>
Looks good to me.
Reviewed-by: Nilay Shroff <nilay@xxxxxxxxxxxxx>