crypto: api - crypto_alg_mod_lookup either tested or untested
[linux-2.6-block.git] / crypto / shash.c
index c9df367332ffd1f122b1d675bcb434b936848bc4..13a0dc150a4d3741a6958b5ae59611d621925be9 100644 (file)
@@ -388,10 +388,15 @@ static int crypto_init_shash_ops_compat(struct crypto_tfm *tfm)
        struct shash_desc *desc = crypto_tfm_ctx(tfm);
        struct crypto_shash *shash;
 
+       if (!crypto_mod_get(calg))
+               return -EAGAIN;
+
        shash = __crypto_shash_cast(crypto_create_tfm(
                calg, &crypto_shash_type));
-       if (IS_ERR(shash))
+       if (IS_ERR(shash)) {
+               crypto_mod_put(calg);
                return PTR_ERR(shash);
+       }
 
        desc->tfm = shash;
        tfm->exit = crypto_exit_shash_ops_compat;
@@ -437,8 +442,6 @@ static unsigned int crypto_shash_ctxsize(struct crypto_alg *alg, u32 type,
 static int crypto_shash_init_tfm(struct crypto_tfm *tfm,
                                 const struct crypto_type *frontend)
 {
-       if (frontend->type != CRYPTO_ALG_TYPE_SHASH)
-               return -EINVAL;
        return 0;
 }