Thread (2 messages) read the whole thread 2 messages, 2 authors, 2008-08-19

Re: [PATCH] crypto: fix larval lookup

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2008-08-19 05:05:48
Subsystem: crypto api, the rest · Maintainers: Herbert Xu, "David S. Miller", Linus Torvalds

Christian Hohnstaedt [off-list ref] wrote:
crypto_alg_mod_lookup() runs in a timeout (60s) for unknown algos.

crypto_larval_error() doesn't find the larval and thus doesn't
finish crypto_larval_wait, because
the larval->mask has the CRYPTO_ALG_TESTED bit set, while
crypto_alg_lookup() is called without that bit in the mask
and the mask comparison in __crypto_alg_lookup fails.

Since larvals itself never get tested, it seems ok to 
reset that bit.

Signed-off-by: Christian Hohnstaedt <redacted>
Thanks for catching this! However, we do want to keep the TESTED
bit in case someone specifically requests for an untested algorithm.

So I'm going to fix it as follows, by using the original type
and mask for error propagation.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} [off-list ref]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/crypto/algboss.c b/crypto/algboss.c
index a635784..d6dc18f 100644
--- a/crypto/algboss.c
+++ b/crypto/algboss.c
@@ -45,6 +45,9 @@ struct cryptomgr_param {
 
 	char larval[CRYPTO_MAX_ALG_NAME];
 	char template[CRYPTO_MAX_ALG_NAME];
+
+	u32 otype;
+	u32 omask;
 };
 
 struct crypto_test_param {
@@ -82,8 +85,7 @@ out:
 	module_put_and_exit(0);
 
 err:
-	crypto_larval_error(param->larval, param->type.data.type,
-			    param->type.data.mask);
+	crypto_larval_error(param->larval, param->otype, param->omask);
 	goto out;
 }
 
@@ -179,6 +181,9 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
 	param->type.data.mask = larval->mask & ~CRYPTO_ALG_TESTED;
 	param->tb[0] = &param->type.attr;
 
+	param->otype = larval->alg.cra_flags;
+	param->omask = larval->mask;
+
 	memcpy(param->larval, larval->alg.cra_name, CRYPTO_MAX_ALG_NAME);
 
 	thread = kthread_run(cryptomgr_probe, param, "cryptomgr_probe");
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help