| From f3c400ef473e00c680ea713a66196b05870b3710 Mon Sep 17 00:00:00 2001 |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| Date: Fri, 25 Jul 2014 19:42:30 -0400 |
| Subject: crypto: arm-aes - fix encryption of unaligned data |
| |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| |
| commit f3c400ef473e00c680ea713a66196b05870b3710 upstream. |
| |
| Fix the same alignment bug as in arm64 - we need to pass residue |
| unprocessed bytes as the last argument to blkcipher_walk_done. |
| |
| Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> |
| Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/arm/crypto/aesbs-glue.c | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/arch/arm/crypto/aesbs-glue.c |
| +++ b/arch/arm/crypto/aesbs-glue.c |
| @@ -137,7 +137,7 @@ static int aesbs_cbc_encrypt(struct blkc |
| dst += AES_BLOCK_SIZE; |
| } while (--blocks); |
| } |
| - err = blkcipher_walk_done(desc, &walk, 0); |
| + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); |
| } |
| return err; |
| } |
| @@ -158,7 +158,7 @@ static int aesbs_cbc_decrypt(struct blkc |
| bsaes_cbc_encrypt(walk.src.virt.addr, walk.dst.virt.addr, |
| walk.nbytes, &ctx->dec, walk.iv); |
| kernel_neon_end(); |
| - err = blkcipher_walk_done(desc, &walk, 0); |
| + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); |
| } |
| while (walk.nbytes) { |
| u32 blocks = walk.nbytes / AES_BLOCK_SIZE; |
| @@ -182,7 +182,7 @@ static int aesbs_cbc_decrypt(struct blkc |
| dst += AES_BLOCK_SIZE; |
| src += AES_BLOCK_SIZE; |
| } while (--blocks); |
| - err = blkcipher_walk_done(desc, &walk, 0); |
| + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); |
| } |
| return err; |
| } |
| @@ -268,7 +268,7 @@ static int aesbs_xts_encrypt(struct blkc |
| bsaes_xts_encrypt(walk.src.virt.addr, walk.dst.virt.addr, |
| walk.nbytes, &ctx->enc, walk.iv); |
| kernel_neon_end(); |
| - err = blkcipher_walk_done(desc, &walk, 0); |
| + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); |
| } |
| return err; |
| } |
| @@ -292,7 +292,7 @@ static int aesbs_xts_decrypt(struct blkc |
| bsaes_xts_decrypt(walk.src.virt.addr, walk.dst.virt.addr, |
| walk.nbytes, &ctx->dec, walk.iv); |
| kernel_neon_end(); |
| - err = blkcipher_walk_done(desc, &walk, 0); |
| + err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); |
| } |
| return err; |
| } |