diff options
Diffstat (limited to 'crypto/api.c')
| -rw-r--r-- | crypto/api.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/crypto/api.c b/crypto/api.c index 1d5290c67108..0ee632bba064 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -204,9 +204,14 @@ static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,  	down_read(&crypto_alg_sem);  	alg = __crypto_alg_lookup(name, type | test, mask | test); -	if (!alg && test) -		alg = __crypto_alg_lookup(name, type, mask) ? -		      ERR_PTR(-ELIBBAD) : NULL; +	if (!alg && test) { +		alg = __crypto_alg_lookup(name, type, mask); +		if (alg && !crypto_is_larval(alg)) { +			/* Test failed */ +			crypto_mod_put(alg); +			alg = ERR_PTR(-ELIBBAD); +		} +	}  	up_read(&crypto_alg_sem);  	return alg;  |