X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=crypto%2Faead.c;h=d9aa733db1647b51c1eea32de4840dc21cd9659d;hb=59285c28d18b77437e6dc7c2abb9aaee10ec3a75;hp=3a6f3f52c7c71911ac6cd7506493fb24ccd8eb50;hpb=6e5565f949af1322f8f3d3f43d044645ae448499;p=~andy%2Flinux diff --git a/crypto/aead.c b/crypto/aead.c index 3a6f3f52c7c..d9aa733db16 100644 --- a/crypto/aead.c +++ b/crypto/aead.c @@ -422,6 +422,22 @@ static struct crypto_alg *crypto_lookup_aead(const char *name, u32 type, if (!alg->cra_aead.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_type == &crypto_aead_type) { + if ((alg->cra_flags ^ type ^ ~mask) & CRYPTO_ALG_TESTED) { + crypto_mod_put(alg); + alg = ERR_PTR(-ENOENT); + } + return alg; + } + + BUG_ON(!alg->cra_aead.ivsize); + return ERR_PTR(crypto_nivaead_default(alg, type, mask)); }