From: Herbert Xu Date: Fri, 19 May 2023 09:04:04 +0000 (+0800) Subject: crypto: shash - Allow cloning on algorithms with no init_tfm X-Git-Tag: v6.6.7~2481^2~55 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b7be31b0d5088507b745bfa014798e52fad6dc7a;p=platform%2Fkernel%2Flinux-starfive.git crypto: shash - Allow cloning on algorithms with no init_tfm Some shash algorithms are so simple that they don't have an init_tfm function. These can be cloned trivially. Check this before failing in crypto_clone_shash. Signed-off-by: Herbert Xu Acked-by: Ard Biesheuvel Signed-off-by: Herbert Xu --- diff --git a/crypto/shash.c b/crypto/shash.c index 717b42d..1fadb6b 100644 --- a/crypto/shash.c +++ b/crypto/shash.c @@ -597,7 +597,7 @@ struct crypto_shash *crypto_clone_shash(struct crypto_shash *hash) return hash; } - if (!alg->clone_tfm) + if (!alg->clone_tfm && (alg->init_tfm || alg->base.cra_init)) return ERR_PTR(-ENOSYS); nhash = crypto_clone_tfm(&crypto_shash_type, tfm); @@ -606,10 +606,12 @@ struct crypto_shash *crypto_clone_shash(struct crypto_shash *hash) nhash->descsize = hash->descsize; - err = alg->clone_tfm(nhash, hash); - if (err) { - crypto_free_shash(nhash); - return ERR_PTR(err); + if (alg->clone_tfm) { + err = alg->clone_tfm(nhash, hash); + if (err) { + crypto_free_shash(nhash); + return ERR_PTR(err); + } } return nhash;