summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorArd Biesheuvel2018-11-08 23:55:16 +0100
committerGreg Kroah-Hartman2018-12-01 09:37:32 +0100
commitc587ba480e12c6efdd81622fa1a3f865093dcbf5 (patch)
tree9ae054dfbf87708531ef1e7fa1b4113a10c40377 /crypto
parentrtc: pcf2127: fix a kmemleak caused in pcf2127_i2c_gather_write (diff)
downloadkernel-qcow2-linux-c587ba480e12c6efdd81622fa1a3f865093dcbf5.tar.gz
kernel-qcow2-linux-c587ba480e12c6efdd81622fa1a3f865093dcbf5.tar.xz
kernel-qcow2-linux-c587ba480e12c6efdd81622fa1a3f865093dcbf5.zip
crypto: simd - correctly take reqsize of wrapped skcipher into account
[ Upstream commit 508a1c4df085a547187eed346f1bfe5e381797f1 ] The simd wrapper's skcipher request context structure consists of a single subrequest whose size is taken from the subordinate skcipher. However, in simd_skcipher_init(), the reqsize that is retrieved is not from the subordinate skcipher but from the cryptd request structure, whose size is completely unrelated to the actual wrapped skcipher. Reported-by: Qian Cai <cai@gmx.us> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Qian Cai <cai@gmx.us> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/simd.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/crypto/simd.c b/crypto/simd.c
index ea7240be3001..78e8d037ae2b 100644
--- a/crypto/simd.c
+++ b/crypto/simd.c
@@ -124,8 +124,9 @@ static int simd_skcipher_init(struct crypto_skcipher *tfm)
ctx->cryptd_tfm = cryptd_tfm;
- reqsize = sizeof(struct skcipher_request);
- reqsize += crypto_skcipher_reqsize(&cryptd_tfm->base);
+ reqsize = crypto_skcipher_reqsize(cryptd_skcipher_child(cryptd_tfm));
+ reqsize = max(reqsize, crypto_skcipher_reqsize(&cryptd_tfm->base));
+ reqsize += sizeof(struct skcipher_request);
crypto_skcipher_set_reqsize(tfm, reqsize);