Commit b7be31b0 authored by Herbert Xu's avatar Herbert Xu

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: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent ed51bba1
...@@ -597,7 +597,7 @@ struct crypto_shash *crypto_clone_shash(struct crypto_shash *hash) ...@@ -597,7 +597,7 @@ struct crypto_shash *crypto_clone_shash(struct crypto_shash *hash)
return hash; return hash;
} }
if (!alg->clone_tfm) if (!alg->clone_tfm && (alg->init_tfm || alg->base.cra_init))
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
nhash = crypto_clone_tfm(&crypto_shash_type, tfm); nhash = crypto_clone_tfm(&crypto_shash_type, tfm);
...@@ -606,10 +606,12 @@ struct crypto_shash *crypto_clone_shash(struct crypto_shash *hash) ...@@ -606,10 +606,12 @@ struct crypto_shash *crypto_clone_shash(struct crypto_shash *hash)
nhash->descsize = hash->descsize; nhash->descsize = hash->descsize;
err = alg->clone_tfm(nhash, hash); if (alg->clone_tfm) {
if (err) { err = alg->clone_tfm(nhash, hash);
crypto_free_shash(nhash); if (err) {
return ERR_PTR(err); crypto_free_shash(nhash);
return ERR_PTR(err);
}
} }
return nhash; return nhash;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment