crypto: skcipher - Fix request for sync algorithms
Herbert Xu [Thu, 25 Jun 2009 06:46:31 +0000 (14:46 +0800)]
When a sync givcipher algorithm is requested, if an async version
of the same algorithm already exists, then we will loop forever
without ever constructing the sync version based on a blkcipher.

This is because we did not include the requested type/mask when
getting a larval for the geniv algorithm that is to be constructed.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

crypto/ablkcipher.c

index e11ce37..43fc8fb 100644 (file)
@@ -201,8 +201,9 @@ static int crypto_givcipher_default(struct crypto_alg *alg, u32 type, u32 mask)
        int err;
 
        larval = crypto_larval_lookup(alg->cra_driver_name,
+                                     (type & ~CRYPTO_ALG_TYPE_MASK) |
                                      CRYPTO_ALG_TYPE_GIVCIPHER,
-                                     CRYPTO_ALG_TYPE_MASK);
+                                     mask | CRYPTO_ALG_TYPE_MASK);
        err = PTR_ERR(larval);
        if (IS_ERR(larval))
                goto out;