]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
crypto: arm64/aes-ccm - fix bugs in non-NEON fallback routine
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 24 Jan 2019 16:33:46 +0000 (17:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Mar 2019 13:35:18 +0000 (14:35 +0100)
commit 969e2f59d589c15f6aaf306e590dde16f12ea4b3 upstream.

Commit 5092fcf34908 ("crypto: arm64/aes-ce-ccm: add non-SIMD generic
fallback") introduced C fallback code to replace the NEON routines
when invoked from a context where the NEON is not available (i.e.,
from the context of a softirq taken while the NEON is already being
used in kernel process context)

Fix two logical flaws in the MAC calculation of the associated data.

Reported-by: Eric Biggers <ebiggers@kernel.org>
Fixes: 5092fcf34908 ("crypto: arm64/aes-ce-ccm: add non-SIMD generic fallback")
Cc: stable@vger.kernel.org
Signed-off-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/arm64/crypto/aes-ce-ccm-glue.c

index a1254036f2b1e0df0e3083dae606a543f914f7d3..ae0d267058517f079c41ee0e20474fb21ca8f462 100644 (file)
@@ -123,7 +123,7 @@ static void ccm_update_mac(struct crypto_aes_ctx *key, u8 mac[], u8 const in[],
                        abytes -= added;
                }
 
-               while (abytes > AES_BLOCK_SIZE) {
+               while (abytes >= AES_BLOCK_SIZE) {
                        __aes_arm64_encrypt(key->key_enc, mac, mac,
                                            num_rounds(key));
                        crypto_xor(mac, in, AES_BLOCK_SIZE);
@@ -137,8 +137,6 @@ static void ccm_update_mac(struct crypto_aes_ctx *key, u8 mac[], u8 const in[],
                                            num_rounds(key));
                        crypto_xor(mac, in, abytes);
                        *macp = abytes;
-               } else {
-                       *macp = 0;
                }
        }
 }