Commit 159de7a8 authored by Alistair Francis's avatar Alistair Francis Committed by Keith Busch
Browse files

nvmet-auth: update sc_c in target host hash calculation



Commit 7e091add "nvme-auth: update sc_c in host response" added
the sc_c variable to the dhchap queue context structure which is
appropriately set during negotiate and then used in the host response.

This breaks secure concat connections with a Linux target as the target
code wasn't updated at the same time. This patch fixes this by adding a
new sc_c variable to the host hash calculations.

Fixes: 7e091add ("nvme-auth: update sc_c in host response")
Tested-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tested-by: default avatarYi Zhang <yi.zhang@redhat.com>
Reviewed-by: default avatarMartin George <marting@netapp.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarAlistair Francis <alistair.francis@wdc.com>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent 03b3bcd3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -298,7 +298,7 @@ int nvmet_auth_host_hash(struct nvmet_req *req, u8 *response,
	const char *hash_name;
	u8 *challenge = req->sq->dhchap_c1;
	struct nvme_dhchap_key *transformed_key;
	u8 buf[4], sc_c = ctrl->concat ? 1 : 0;
	u8 buf[4];
	int ret;

	hash_name = nvme_auth_hmac_name(ctrl->shash_id);
@@ -367,7 +367,7 @@ int nvmet_auth_host_hash(struct nvmet_req *req, u8 *response,
	ret = crypto_shash_update(shash, buf, 2);
	if (ret)
		goto out;
	*buf = sc_c;
	*buf = req->sq->sc_c;
	ret = crypto_shash_update(shash, buf, 1);
	if (ret)
		goto out;
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ static u8 nvmet_auth_negotiate(struct nvmet_req *req, void *d)
		 data->auth_protocol[0].dhchap.halen,
		 data->auth_protocol[0].dhchap.dhlen);
	req->sq->dhchap_tid = le16_to_cpu(data->t_id);
	req->sq->sc_c = data->sc_c;
	if (data->sc_c != NVME_AUTH_SECP_NOSC) {
		if (!IS_ENABLED(CONFIG_NVME_TARGET_TCP_TLS))
			return NVME_AUTH_DHCHAP_FAILURE_CONCAT_MISMATCH;
+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ struct nvmet_sq {
	bool			authenticated;
	struct delayed_work	auth_expired_work;
	u16			dhchap_tid;
	u8			sc_c;
	u8			dhchap_status;
	u8			dhchap_step;
	u8			*dhchap_c1;