crypto: talitos – check AES key size [Linux 5.3]

This Linux kernel change "crypto: talitos – check AES key size" is included in the Linux 5.3 release. This change is authored by Christophe Leroy <christophe.leroy [at] c-s.fr> on Tue May 21 13:34:10 2019 +0000. The commit for this change in Linux stable tree is 1ba34e7 (patch).

crypto: talitos - check AES key size

Although the HW accepts any size and silently truncates
it to the correct length, the extra tests expects EINVAL
to be returned when the key size is not valid.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Fixes: 4de9d0b547b9 ("crypto: talitos - Add ablkcipher algorithms")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

There are 15 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/crypto/talitos.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 6312f8d..95f71e1 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -1622,6 +1622,18 @@ static int ablkcipher_des3_setkey(struct crypto_ablkcipher *cipher,
    return ablkcipher_setkey(cipher, key, keylen);
 }

+static int ablkcipher_aes_setkey(struct crypto_ablkcipher *cipher,
+                 const u8 *key, unsigned int keylen)
+{
+   if (keylen == AES_KEYSIZE_128 || keylen == AES_KEYSIZE_192 ||
+       keylen == AES_KEYSIZE_256)
+       return ablkcipher_setkey(cipher, key, keylen);
+
+   crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN);
+
+   return -EINVAL;
+}
+
 static void common_nonsnoop_unmap(struct device *dev,
                  struct talitos_edesc *edesc,
                  struct ablkcipher_request *areq)
@@ -2782,6 +2794,7 @@ struct talitos_alg_template {
                .min_keysize = AES_MIN_KEY_SIZE,
                .max_keysize = AES_MAX_KEY_SIZE,
                .ivsize = AES_BLOCK_SIZE,
+               .setkey = ablkcipher_aes_setkey,
            }
        },
        .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2798,6 +2811,7 @@ struct talitos_alg_template {
                .min_keysize = AES_MIN_KEY_SIZE,
                .max_keysize = AES_MAX_KEY_SIZE,
                .ivsize = AES_BLOCK_SIZE,
+               .setkey = ablkcipher_aes_setkey,
            }
        },
        .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2815,6 +2829,7 @@ struct talitos_alg_template {
                .min_keysize = AES_MIN_KEY_SIZE,
                .max_keysize = AES_MAX_KEY_SIZE,
                .ivsize = AES_BLOCK_SIZE,
+               .setkey = ablkcipher_aes_setkey,
            }
        },
        .desc_hdr_template = DESC_HDR_TYPE_AESU_CTR_NONSNOOP |

Leave a Reply

Your email address will not be published. Required fields are marked *