|
@@ -282,6 +282,25 @@ static struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type,
|
|
|
alg->cra_ablkcipher.ivsize))
|
|
|
return alg;
|
|
|
|
|
|
+ crypto_mod_put(alg);
|
|
|
+ alg = crypto_alg_mod_lookup(name, type | CRYPTO_ALG_TESTED,
|
|
|
+ mask & ~CRYPTO_ALG_TESTED);
|
|
|
+ if (IS_ERR(alg))
|
|
|
+ return alg;
|
|
|
+
|
|
|
+ if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) ==
|
|
|
+ CRYPTO_ALG_TYPE_GIVCIPHER) {
|
|
|
+ if ((alg->cra_flags ^ type ^ ~mask) & CRYPTO_ALG_TESTED) {
|
|
|
+ crypto_mod_put(alg);
|
|
|
+ alg = ERR_PTR(-ENOENT);
|
|
|
+ }
|
|
|
+ return alg;
|
|
|
+ }
|
|
|
+
|
|
|
+ BUG_ON(!((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) ==
|
|
|
+ CRYPTO_ALG_TYPE_BLKCIPHER ? alg->cra_blkcipher.ivsize :
|
|
|
+ alg->cra_ablkcipher.ivsize));
|
|
|
+
|
|
|
return ERR_PTR(crypto_givcipher_default(alg, type, mask));
|
|
|
}
|
|
|
|