Skip to contentSkip to conversation

FAILED: patch "[PATCH] scsi: target: iscsi: Fix data digest calculation" failed to apply to 4.4-stable tree

PATCH [email protected] 1 participant 1 message Sep 15, 2020

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 5528d03183fe5243416c706f64b1faa518b05130 Mon Sep 17 00:00:00 2001
From: Varun Prakash <[email protected]>
Date: Tue, 25 Aug 2020 18:05:10 +0530
Subject: [PATCH] scsi: target: iscsi: Fix data digest calculation

Current code does not consider 'page_off' in data digest calculation. To fix this, add a local variable 'first_sg' and set first_sg.offset to sg->offset + page_off.

Fixes e48354ce078c ("iscsi-target: Add iSCSI fabric support for target v4.1")
drivers/target/iscsi/iscsi_target.c +15 -2
index c9689610e186..2ec778e97b1b 100644
@@ -1389,14 +1389,27 @@ static u32 iscsit_do_crypto_hash_sg(
 	sg = cmd->first_data_sg;
 	page_off = cmd->first_data_sg_off;
 
+	if (data_length && page_off) {
+		struct scatterlist first_sg;
+		u32 len = min_t(u32, data_length, sg->length - page_off);
+
+		sg_init_table(&first_sg, 1);
+		sg_set_page(&first_sg, sg_page(sg), len, sg->offset + page_off);
+
+		ahash_request_set_crypt(hash, &first_sg, NULL, len);
+		crypto_ahash_update(hash);
+
+		data_length -= len;
+		sg = sg_next(sg);
+	}
+
 	while (data_length) {
-		u32 cur_len = min_t(u32, data_length, (sg->length - page_off));
+		u32 cur_len = min_t(u32, data_length, sg->length);
 
 		ahash_request_set_crypt(hash, sg, NULL, cur_len);
 		crypto_ahash_update(hash);
 
 		data_length -= cur_len;
-		page_off = 0;
 		/* iscsit_map_iovec has already checked for invalid sg pointers */
 		sg = sg_next(sg);
 	}