Commit 1bd31de3 authored by Alexei Potashnik's avatar Alexei Potashnik Committed by Sasha Levin

target/iscsi: Use proper SGL accessors for digest computation

[ Upstream commit aa75679c ]

Current implementation assumes that all the buffers of an IO are linked
with a single SG list, which is OK because target-core is only allocating
a contigious scatterlist region.  However, this assumption is wrong for
se_cmd descriptors that want to use chaining across multiple SGL regions.

Fix this up by using proper SGL accessors for digest payload computation.
Signed-off-by: default avatarAlexei Potashnik <alexei@purestorage.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
parent 89ff28d0
......@@ -1205,7 +1205,6 @@ static u32 iscsit_do_crypto_hash_sg(
u8 *pad_bytes)
{
u32 data_crc;
u32 i;
struct scatterlist *sg;
unsigned int page_off;
......@@ -1214,15 +1213,15 @@ static u32 iscsit_do_crypto_hash_sg(
sg = cmd->first_data_sg;
page_off = cmd->first_data_sg_off;
i = 0;
while (data_length) {
u32 cur_len = min_t(u32, data_length, (sg[i].length - page_off));
u32 cur_len = min_t(u32, data_length, (sg->length - page_off));
crypto_hash_update(hash, &sg[i], cur_len);
crypto_hash_update(hash, sg, cur_len);
data_length -= cur_len;
page_off = 0;
i++;
/* iscsit_map_iovec has already checked for invalid sg pointers */
sg = sg_next(sg);
}
if (padding) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment