|
|
@@ -418,9 +418,11 @@ static int gcm_encrypt(struct aead_request *req)
|
|
|
put_unaligned_be32(2, iv + GCM_IV_SIZE);
|
|
|
|
|
|
while (walk.nbytes >= (2 * AES_BLOCK_SIZE)) {
|
|
|
- int blocks = walk.nbytes / AES_BLOCK_SIZE;
|
|
|
+ const int blocks =
|
|
|
+ walk.nbytes / (2 * AES_BLOCK_SIZE) * 2;
|
|
|
u8 *dst = walk.dst.virt.addr;
|
|
|
u8 *src = walk.src.virt.addr;
|
|
|
+ int remaining = blocks;
|
|
|
|
|
|
do {
|
|
|
__aes_arm64_encrypt(ctx->aes_key.key_enc,
|
|
|
@@ -430,9 +432,9 @@ static int gcm_encrypt(struct aead_request *req)
|
|
|
|
|
|
dst += AES_BLOCK_SIZE;
|
|
|
src += AES_BLOCK_SIZE;
|
|
|
- } while (--blocks > 0);
|
|
|
+ } while (--remaining > 0);
|
|
|
|
|
|
- ghash_do_update(walk.nbytes / AES_BLOCK_SIZE, dg,
|
|
|
+ ghash_do_update(blocks, dg,
|
|
|
walk.dst.virt.addr, &ctx->ghash_key,
|
|
|
NULL);
|
|
|
|
|
|
@@ -553,7 +555,7 @@ static int gcm_decrypt(struct aead_request *req)
|
|
|
put_unaligned_be32(2, iv + GCM_IV_SIZE);
|
|
|
|
|
|
while (walk.nbytes >= (2 * AES_BLOCK_SIZE)) {
|
|
|
- int blocks = walk.nbytes / AES_BLOCK_SIZE;
|
|
|
+ int blocks = walk.nbytes / (2 * AES_BLOCK_SIZE) * 2;
|
|
|
u8 *dst = walk.dst.virt.addr;
|
|
|
u8 *src = walk.src.virt.addr;
|
|
|
|