[PATCH 3/6] nvme-auth: don't re-authenticate if the controller is not LIVE
Hannes Reinecke
hare at suse.de
Tue Oct 25 10:22:32 PDT 2022
On 10/25/22 15:43, Sagi Grimberg wrote:
> The connect sequence will re-authenticate.
>
> Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
> ---
> drivers/nvme/host/auth.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/nvme/host/auth.c b/drivers/nvme/host/auth.c
> index 734928282d3e..93c0fc71bc7c 100644
> --- a/drivers/nvme/host/auth.c
> +++ b/drivers/nvme/host/auth.c
> @@ -939,6 +939,13 @@ static void nvme_dhchap_auth_work(struct work_struct *work)
> container_of(work, struct nvme_ctrl, dhchap_auth_work);
> int ret, q;
>
> + /*
> + * If the ctrl is no connected, bail as reconnect will handle
> + * authentication.
> + */
> + if (ctrl->state != NVME_CTRL_LIVE)
> + return;
> +
> /* Authenticate admin queue first */
> ret = nvme_auth_negotiate(ctrl, 0);
> if (ret) {
Hmm. That is only part of the story; the controller can be reset at any
time during the workqueue function.
Doing so will invalidate the digest hash, but we only find out about
queue being invalid once we _send_ data. So we crash in
skb_copy_datagram_iter().
I got a patch here somewhere (which is still under testing, hence I
didn't send it off), but can do so now if requested.
Cheers,
Hannes
More information about the Linux-nvme
mailing list