From: Guixin Liu <kanie@linux.alibaba.com>
To: Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@kernel.dk>,
Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>,
Nilay Shroff <nilay@linux.ibm.com>,
Daniel Wagner <dwagner@suse.de>, Hannes Reinecke <hare@suse.de>
Cc: linux-nvme@lists.infradead.org
Subject: [PATCH 3/6] nvme-auth: fix data race on ctrl->transaction
Date: Fri, 6 Nov 2026 09:58:39 +0800 [thread overview]
Message-ID: <20261106015842.3534898-4-kanie@linux.alibaba.com> (raw)
In-Reply-To: <20261106015842.3534898-1-kanie@linux.alibaba.com>
nvme_ctrl_auth_work() queues the DH-HMAC-CHAP exchange of every queue
on nvme-auth-wq without waiting for them, so multiple
nvme_queue_auth_work() instances run concurrently and all increment
ctrl->transaction in nvme_queue_auth_work(). The plain increment is a
data race, and the lost updates hand the same transaction id to
concurrent queues.
The controller side only echoes the transaction id within a queue, so
the race has no functional impact today, but the increment is still
unsynchronized and KCSAN reports it. Use an atomic_t.
Signed-off-by: Guixin Liu <kanie@linux.alibaba.com>
---
drivers/nvme/host/auth.c | 2 +-
drivers/nvme/host/nvme.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/nvme/host/auth.c b/drivers/nvme/host/auth.c
index 85f005a5efd0..107355ee9ef1 100644
--- a/drivers/nvme/host/auth.c
+++ b/drivers/nvme/host/auth.c
@@ -765,7 +765,7 @@ static void nvme_queue_auth_work(struct work_struct *work)
return;
}
- chap->transaction = ctrl->transaction++;
+ chap->transaction = (u16)atomic_fetch_inc(&ctrl->transaction);
/* DH-HMAC-CHAP Step 1: send negotiate */
dev_dbg(ctrl->device, "%s: qid %d send negotiate\n",
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 92c048002ecd..1fb676dade12 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -446,7 +446,7 @@ struct nvme_ctrl {
struct nvme_dhchap_queue_context *dhchap_ctxs;
struct nvme_dhchap_key *host_key;
struct nvme_dhchap_key *ctrl_key;
- u16 transaction;
+ atomic_t transaction;
#endif
key_serial_t tls_pskid;
--
2.43.7
next prev parent reply other threads:[~2026-11-06 1:58 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 1:58 [PATCH 0/6] nvme: fabrics and target fixes Guixin Liu
2026-11-06 1:58 ` [PATCH 1/6] nvme: reject a reconnect_delay of 0 through sysfs Guixin Liu
2026-11-06 2:09 ` sashiko-bot
2026-11-06 7:39 ` Hannes Reinecke
2026-11-06 10:33 ` Christoph Hellwig
2026-11-06 13:32 ` Nilay Shroff
2026-11-06 1:58 ` [PATCH 2/6] nvme-fc: fix iterator over rport->ctrl_list in nvme_fc_match_disconn_ls() Guixin Liu
2026-11-06 2:06 ` sashiko-bot
2026-11-06 7:38 ` Hannes Reinecke
2026-11-06 10:49 ` Guixin Liu
2026-11-06 1:58 ` Guixin Liu [this message]
2026-11-06 7:27 ` [PATCH 3/6] nvme-auth: fix data race on ctrl->transaction Hannes Reinecke
2026-11-06 9:28 ` Guixin Liu
2026-11-06 1:58 ` [PATCH 4/6] nvmet: take subsys->lock in nvmet_subsys_attr_tbkas_store() Guixin Liu
2026-11-06 7:27 ` Hannes Reinecke
2026-11-06 10:34 ` Christoph Hellwig
2026-11-06 13:32 ` Nilay Shroff
2026-11-06 1:58 ` [PATCH 5/6] nvmet: fix controller reference leak in nvmet_install_queue() error paths Guixin Liu
2026-11-06 7:31 ` Hannes Reinecke
2026-11-06 9:29 ` Guixin Liu
2026-11-06 1:58 ` [PATCH 6/6] nvmet: use GFP_KERNEL for PR allocations Guixin Liu
2026-11-06 7:31 ` Hannes Reinecke
2026-11-06 10:35 ` Christoph Hellwig
2026-11-06 13:35 ` Nilay Shroff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261106015842.3534898-4-kanie@linux.alibaba.com \
--to=kanie@linux.alibaba.com \
--cc=axboe@kernel.dk \
--cc=dwagner@suse.de \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=nilay@linux.ibm.com \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.