Skip to content

Commit

Permalink
crypto: mv_cesa - Fix situation where the dest sglist is organized di…
Browse files Browse the repository at this point in the history
…fferently than the source sglist

Bugfix for situations where the destination scatterlist has a different
buffer structure than the source scatterlist (e.g. source has one 2K
buffer and dest has 2 1K buffers)

Signed-off-by: Uri Simchoni <uri@jdland.co.il>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Uri Simchoni authored and Herbert Xu committed Apr 13, 2010
1 parent 6bc6fcd commit f565e67
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions drivers/crypto/mv_cesa.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,8 @@ static void dequeue_complete_req(void)
struct ablkcipher_request *req = cpg->cur_req;
void *buf;
int ret;
int need_copy_len = cpg->p.crypt_len;
int sram_offset = 0;

cpg->p.total_req_bytes += cpg->p.crypt_len;
do {
Expand All @@ -257,14 +259,16 @@ static void dequeue_complete_req(void)
buf = cpg->p.dst_sg_it.addr;
buf += cpg->p.dst_start;

dst_copy = min(cpg->p.crypt_len, cpg->p.sg_dst_left);

memcpy(buf, cpg->sram + SRAM_DATA_OUT_START, dst_copy);
dst_copy = min(need_copy_len, cpg->p.sg_dst_left);

memcpy(buf,
cpg->sram + SRAM_DATA_OUT_START + sram_offset,
dst_copy);
sram_offset += dst_copy;
cpg->p.sg_dst_left -= dst_copy;
cpg->p.crypt_len -= dst_copy;
need_copy_len -= dst_copy;
cpg->p.dst_start += dst_copy;
} while (cpg->p.crypt_len > 0);
} while (need_copy_len > 0);

BUG_ON(cpg->eng_st != ENGINE_W_DEQUEUE);
if (cpg->p.total_req_bytes < req->nbytes) {
Expand Down

0 comments on commit f565e67

Please sign in to comment.