From: Geliang Tang Date: Tue, 26 May 2026 09:28:05 +0000 (+0800) Subject: nvmet-tcp: check return value of nvmet_tcp_set_queue_sock X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=7ef789703e2b91775dcb36b2efa46325be31a2a0;p=thirdparty%2Fkernel%2Flinux.git nvmet-tcp: check return value of nvmet_tcp_set_queue_sock The return value of nvmet_tcp_set_queue_sock() is currently ignored in nvmet_tcp_tls_handshake_done(). If it fails (e.g., due to the socket not being in TCP_ESTABLISHED state), the socket callbacks will not be properly set, leading to queue and socket leakage. Fix this by capturing the return value and calling nvmet_tcp_schedule_release_queue() on failure to ensure proper cleanup. Fixes: 675b453e0241 ("nvmet-tcp: enable TLS handshake upcall") Reviewed-by: Hannes Reinecke Reviewed-by: Chaitanya Kulkarni Signed-off-by: Geliang Tang Signed-off-by: Keith Busch --- diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c index 93b3c6134240a..3568fa9a09053 100644 --- a/drivers/nvme/target/tcp.c +++ b/drivers/nvme/target/tcp.c @@ -1842,10 +1842,11 @@ static void nvmet_tcp_tls_handshake_done(void *data, int status, if (!status) status = nvmet_tcp_tls_key_lookup(queue, peerid); + if (!status) + status = nvmet_tcp_set_queue_sock(queue); + if (status) nvmet_tcp_schedule_release_queue(queue); - else - nvmet_tcp_set_queue_sock(queue); kref_put(&queue->kref, nvmet_tcp_release_queue); }