Skip to content

Commit

Permalink
target/iscsi: Use proper SGL accessors for digest computation
Browse files Browse the repository at this point in the history
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: Alexei Potashnik <alexei@purestorage.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
  • Loading branch information
Alexei Potashnik authored and Nicholas Bellinger committed Jul 31, 2015
1 parent b6a54b8 commit aa75679
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions drivers/target/iscsi/iscsi_target.c
Original file line number Diff line number Diff line change
Expand Up @@ -1209,7 +1209,6 @@ static u32 iscsit_do_crypto_hash_sg(
u8 *pad_bytes)
{
u32 data_crc;
u32 i;
struct scatterlist *sg;
unsigned int page_off;

Expand All @@ -1218,15 +1217,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) {
Expand Down

0 comments on commit aa75679

Please sign in to comment.