Commit aa75679c authored by Alexei Potashnik's avatar Alexei Potashnik Committed by Nicholas Bellinger

target/iscsi: Use proper SGL accessors for digest computation

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>
parent b6a54b8d
...@@ -1209,7 +1209,6 @@ static u32 iscsit_do_crypto_hash_sg( ...@@ -1209,7 +1209,6 @@ static u32 iscsit_do_crypto_hash_sg(
u8 *pad_bytes) u8 *pad_bytes)
{ {
u32 data_crc; u32 data_crc;
u32 i;
struct scatterlist *sg; struct scatterlist *sg;
unsigned int page_off; unsigned int page_off;
...@@ -1218,15 +1217,15 @@ static u32 iscsit_do_crypto_hash_sg( ...@@ -1218,15 +1217,15 @@ static u32 iscsit_do_crypto_hash_sg(
sg = cmd->first_data_sg; sg = cmd->first_data_sg;
page_off = cmd->first_data_sg_off; page_off = cmd->first_data_sg_off;
i = 0;
while (data_length) { 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; data_length -= cur_len;
page_off = 0; page_off = 0;
i++; /* iscsit_map_iovec has already checked for invalid sg pointers */
sg = sg_next(sg);
} }
if (padding) { 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