crypto: api - fix finding algorithm currently being tested
Commiteb02c38f01
("crypto: api - Keep failed instances alive") is making allocating crypto transforms sometimes fail with ELIBBAD, when multiple processes try to access encrypted files with fscrypt for the first time since boot. The problem is that the "request larval" for the algorithm is being mistaken for an algorithm which failed its tests. Fix it by only returning ELIBBAD for "non-larval" algorithms. Also don't leak a reference to the algorithm. Fixes:eb02c38f01
("crypto: api - Keep failed instances alive") Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
60cc43fc88
commit
b346e492d7
11
crypto/api.c
11
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;
|
||||
|
|
Loading…
Reference in New Issue