summaryrefslogtreecommitdiffstats
path: root/crypto/shash.c
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2019-01-07 04:07:20 +0100
committerHerbert Xu <herbert@gondor.apana.org.au>2019-01-18 11:40:24 +0100
commit41a2e94f8157ab52ab36805cfd56cc8dbd08dd39 (patch)
tree7eabd787fabeef3ef189b6ff28a8787ef082ff91 /crypto/shash.c
parentcrypto: aead - set CRYPTO_TFM_NEED_KEY if ->setkey() fails (diff)
downloadlinux-41a2e94f8157ab52ab36805cfd56cc8dbd08dd39.tar.xz
linux-41a2e94f8157ab52ab36805cfd56cc8dbd08dd39.zip
crypto: shash - require neither or both ->export() and ->import()
Prevent registering shash algorithms that implement ->export() but not ->import(), or ->import() but not ->export(). Such cases don't make sense and could confuse the check that shash_prepare_alg() does for just ->export(). I don't believe this affects any existing algorithms; this is just preventing future mistakes. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/shash.c')
-rw-r--r--crypto/shash.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/crypto/shash.c b/crypto/shash.c
index 40311ccad3fa..2bffdecf1f83 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -472,6 +472,9 @@ static int shash_prepare_alg(struct shash_alg *alg)
alg->statesize > HASH_MAX_STATESIZE)
return -EINVAL;
+ if ((alg->export && !alg->import) || (alg->import && !alg->export))
+ return -EINVAL;
+
base->cra_type = &crypto_shash_type;
base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK;
base->cra_flags |= CRYPTO_ALG_TYPE_SHASH;