Patch "crypto: skcipher - Add missing API setkey checks" has been added to the 4.11-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
crypto: skcipher - Add missing API setkey checks
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
crypto-skcipher-add-missing-api-setkey-checks.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
9933e113c2e87a9f46a40fde8dafbf801dca1ab9Mon Sep 17 00:00:00 2001
From: Herbert Xu <[email protected]>
Date: Wed, 10 May 2017 03:48:23 +0800
Subject: crypto: skcipher - Add missing API setkey checks
From: Herbert Xu <[email protected]>
commit 9933e113c2e87a9f46a40fde8dafbf801dca1ab9 upstream.
The API setkey checks for key sizes and alignment went AWOL during the skcipher conversion. This patch restores them.
--- crypto/skcipher.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-)
crypto/skcipher.c +39 -1
@@ -764,6 +764,44 @@ static int crypto_init_skcipher_ops_ablkreturn 0 ; } +static int skcipher_setkey_unaligned (struct crypto_skcipher *tfm, +const u8 *key,unsigned int keylen) +{ +unsigned long alignmask =crypto_skcipher_alignmask (tfm); +struct skcipher_alg *cipher =crypto_skcipher_alg (tfm); +u8 *buffer, *alignbuffer; +unsigned long absize; +int ret; + + absize = keylen + alignmask; + buffer =kmalloc (absize,GFP_ATOMIC ); +if (!buffer) +return -ENOMEM ; + + alignbuffer = (u8 *)ALIGN ((unsigned long )buffer, alignmask +1 ); +memcpy (alignbuffer, key, keylen); + ret = cipher->setkey (tfm, alignbuffer, keylen); +kzfree (buffer); +return ret; +} + +static int skcipher_setkey (struct crypto_skcipher *tfm,const u8 *key, +unsigned int keylen) +{ +struct skcipher_alg *cipher =crypto_skcipher_alg (tfm); +unsigned long alignmask =crypto_skcipher_alignmask (tfm); + +if (keylen < cipher->min_keysize || keylen > cipher->max_keysize) { +crypto_skcipher_set_flags (tfm,CRYPTO_TFM_RES_BAD_KEY_LEN ); +return -EINVAL ; + } + +if ((unsigned long )key & alignmask) +return skcipher_setkey_unaligned (tfm, key, keylen); + +return cipher->setkey (tfm, key, keylen); +} +static void crypto_skcipher_exit_tfm (struct crypto_tfm *tfm) {struct crypto_skcipher *skcipher =__crypto_skcipher_cast (tfm);
@@ -784,7 +822,7 @@ static int crypto_skcipher_init_tfm(stru tfm->__crt_alg->cra_type == &crypto_givcipher_type)return crypto_init_skcipher_ops_ablkcipher (tfm); - skcipher->setkey = alg->setkey; + skcipher->setkey = skcipher_setkey; skcipher->encrypt = alg->encrypt; skcipher->decrypt = alg->decrypt; skcipher->ivsize = alg->ivsize;
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/crypto-skcipher-add-missing-api-setkey-checks.patch