[PATCH v2] nvmet: synchronize DH-CHAP secret removal
Sreeraj S Kurup
sreekuttan2156239 at gmail.com
Tue Nov 10 00:15:59 PST 2026
The empty-secret path in nvmet_auth_set_key() modifies and frees
host authentication secrets without holding nvmet_config_sem.
nvmet_setup_auth() accesses these fields under the read lock,
allowing concurrent secret removal to cause a use-after-free.
Acquire nvmet_config_sem for writing while clearing the secrets
to synchronize with authentication setup.
Fixes: bb2df18958b4 ("nvmet-auth: allow to clear DH-HMAC-CHAP keys")
Signed-off-by: Sreeraj S Kurup <sreekuttan2156239 at gmail.com>
---
v2:
- Add Fixes trailer.
drivers/nvme/target/auth.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/nvme/target/auth.c b/drivers/nvme/target/auth.c
index ccba84b1344e..8fe521690ccd 100644
--- a/drivers/nvme/target/auth.c
+++ b/drivers/nvme/target/auth.c
@@ -26,6 +26,7 @@ int nvmet_auth_set_key(struct nvmet_host *host, const char *secret,
char *dhchap_secret;
if (!strlen(secret)) {
+ down_write(&nvmet_config_sem);
if (set_ctrl) {
kfree(host->dhchap_ctrl_secret);
host->dhchap_ctrl_secret = NULL;
@@ -35,6 +36,7 @@ int nvmet_auth_set_key(struct nvmet_host *host, const char *secret,
host->dhchap_secret = NULL;
host->dhchap_key_hash = 0;
}
+ up_write(&nvmet_config_sem);
return 0;
}
if (sscanf(secret, "DHHC-1:%hhd:%*s", &key_hash) != 1)
--
2.55.0
More information about the Linux-nvme
mailing list