nvmet-auth: always free derived key data
authorHannes Reinecke <hare@kernel.org>
Fri, 25 Apr 2025 09:34:34 +0000 (11:34 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 30 Apr 2025 13:09:09 +0000 (08:09 -0500)
After calling nvme_auth_derive_tls_psk() we need to free the resulting
psk data, as either TLS is disable (and we don't need the data anyway)
or the psk data is copied into the resulting key (and can be free, too).

Fixes: fa2e0f8bbc68 ("nvmet-tcp: support secure channel concatenation")
Reported-by: Yi Zhang <yi.zhang@redhat.com>
Suggested-by: Maurizio Lombardi <mlombard@bsdbackstore.eu>
Signed-off-by: Hannes Reinecke <hare@kernel.org>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/auth.c

index cef8d77..9429b82 100644 (file)
@@ -600,13 +600,12 @@ void nvmet_auth_insert_psk(struct nvmet_sq *sq)
                pr_warn("%s: ctrl %d qid %d failed to refresh key, error %ld\n",
                        __func__, sq->ctrl->cntlid, sq->qid, PTR_ERR(tls_key));
                tls_key = NULL;
-               kfree_sensitive(tls_psk);
        }
        if (sq->ctrl->tls_key)
                key_put(sq->ctrl->tls_key);
        sq->ctrl->tls_key = tls_key;
 #endif
-
+       kfree_sensitive(tls_psk);
 out_free_digest:
        kfree_sensitive(digest);
 out_free_psk: