crypto: atmel-aes - Add NIST 800-38A's zero length cryptlen constraint
authorTudor Ambarus <tudor.ambarus@microchip.com>
Tue, 20 Jul 2021 08:55:31 +0000 (11:55 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 30 Jul 2021 02:58:33 +0000 (10:58 +0800)
NIST 800-38A requires for the ECB, CBC, CFB, OFB and CTR modes that
the plaintext and ciphertext to have a positive integer length.

Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/atmel-aes.c

index 4e9515e..8ea873b 100644 (file)
@@ -1094,6 +1094,13 @@ static int atmel_aes_crypt(struct skcipher_request *req, unsigned long mode)
        if (opmode == AES_FLAGS_XTS && req->cryptlen < XTS_BLOCK_SIZE)
                return -EINVAL;
 
+       /*
+        * ECB, CBC, CFB, OFB or CTR mode require the plaintext and ciphertext
+        * to have a positve integer length.
+        */
+       if (!req->cryptlen && opmode != AES_FLAGS_XTS)
+               return 0;
+
        if ((opmode == AES_FLAGS_ECB || opmode == AES_FLAGS_CBC) &&
            !IS_ALIGNED(req->cryptlen, crypto_skcipher_blocksize(skcipher)))
                return -EINVAL;