Skip to content

Commit

Permalink
crypto: omap-aes - Fix support for unequal lengths
Browse files Browse the repository at this point in the history
commit 6d7e7e0 upstream.

For cases where total length of an input SGs is not same as
length of the input data for encryption, omap-aes driver
crashes. This happens in the case when IPsec is trying to use
omap-aes driver.

To avoid this, we copy all the pages from the input SG list
into a contiguous buffer and prepare a single element SG list
for this buffer with length as the total bytes to crypt, which is
similar thing that is done in case of unaligned lengths.

Fixes: 6242332 ("crypto: omap-aes - Add support for cases of unaligned lengths")
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Vutla, Lokesh authored and Greg Kroah-Hartman committed May 6, 2015
1 parent 3b70a77 commit 5e0b200
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions drivers/crypto/omap-aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -554,15 +554,23 @@ static int omap_aes_crypt_dma_stop(struct omap_aes_dev *dd)
return err;
}

static int omap_aes_check_aligned(struct scatterlist *sg)
static int omap_aes_check_aligned(struct scatterlist *sg, int total)
{
int len = 0;

while (sg) {
if (!IS_ALIGNED(sg->offset, 4))
return -1;
if (!IS_ALIGNED(sg->length, AES_BLOCK_SIZE))
return -1;

len += sg->length;
sg = sg_next(sg);
}

if (len != total)
return -1;

return 0;
}

Expand Down Expand Up @@ -633,8 +641,8 @@ static int omap_aes_handle_queue(struct omap_aes_dev *dd,
dd->in_sg = req->src;
dd->out_sg = req->dst;

if (omap_aes_check_aligned(dd->in_sg) ||
omap_aes_check_aligned(dd->out_sg)) {
if (omap_aes_check_aligned(dd->in_sg, dd->total) ||
omap_aes_check_aligned(dd->out_sg, dd->total)) {
if (omap_aes_copy_sgs(dd))
pr_err("Failed to copy SGs for unaligned cases\n");
dd->sgs_copied = 1;
Expand Down

0 comments on commit 5e0b200

Please sign in to comment.