|
@@ -215,8 +215,19 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
|
|
|
mask &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD);
|
|
|
type &= mask;
|
|
|
|
|
|
- alg = try_then_request_module(crypto_alg_lookup(name, type, mask),
|
|
|
- name);
|
|
|
+ alg = crypto_alg_lookup(name, type, mask);
|
|
|
+ if (!alg) {
|
|
|
+ char tmp[CRYPTO_MAX_ALG_NAME];
|
|
|
+
|
|
|
+ request_module(name);
|
|
|
+
|
|
|
+ if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask) &&
|
|
|
+ snprintf(tmp, sizeof(tmp), "%s-all", name) < sizeof(tmp))
|
|
|
+ request_module(tmp);
|
|
|
+
|
|
|
+ alg = crypto_alg_lookup(name, type, mask);
|
|
|
+ }
|
|
|
+
|
|
|
if (alg)
|
|
|
return crypto_is_larval(alg) ? crypto_larval_wait(alg) : alg;
|
|
|
|