From: Eric Biggers <[email protected]>

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 <[email protected]>
---
 crypto/shash.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/crypto/shash.c b/crypto/shash.c
index 40311ccad3fae..2bffdecf1f837 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;
-- 
2.20.1

Reply via email to