Both crypto_larval_lookup() as well as the crypto_alg_lookup() called therefrom (and only therefrom) will apply the very same adjustments to their mask and type parameters if the original mask value is found to not have CRYPTO_ALG_TESTED set. There is no point in having the code duplicated, do it once near the entry of crypto_larval_lookup(). There is no change in behaviour. Signed-off-by: Nicolai Stange <nstange@xxxxxxx> --- crypto/api.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/crypto/api.c b/crypto/api.c index b96b65b3d5c7..594c494a27d9 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -238,12 +238,6 @@ static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, { struct crypto_alg *alg; - if (!(mask & CRYPTO_ALG_TESTED)) { - WARN_ON_ONCE(type & CRYPTO_ALG_TESTED); - mask |= CRYPTO_ALG_TESTED; - type |= CRYPTO_ALG_TESTED; - } - down_read(&crypto_alg_sem); alg = __crypto_alg_lookup(name, type, mask); if (!alg && (type & CRYPTO_ALG_TESTED)) { @@ -276,6 +270,12 @@ static struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, type &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD); mask &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD); + if (!(mask & CRYPTO_ALG_TESTED)) { + WARN_ON_ONCE(type & CRYPTO_ALG_TESTED); + mask |= CRYPTO_ALG_TESTED; + type |= CRYPTO_ALG_TESTED; + } + alg = crypto_alg_lookup(name, type, mask); if (!alg && !(mask & CRYPTO_NOLOAD)) { request_module("crypto-%s", name); @@ -290,12 +290,6 @@ static struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, if (!IS_ERR_OR_NULL(alg) && crypto_is_larval(alg)) alg = crypto_larval_wait(alg); else if (!alg) { - if (!(mask & CRYPTO_ALG_TESTED)) { - WARN_ON_ONCE((type & CRYPTO_ALG_TESTED)); - mask |= CRYPTO_ALG_TESTED; - type |= CRYPTO_ALG_TESTED; - } - /* * Only add a lookup larval if the request is for a * tested algorithm, everything else makes no sense. -- 2.26.2