From: Herbert Xu Date: Thu, 23 Apr 2015 08:34:47 +0000 (+0800) Subject: crypto: skcipher - Fix corner case in crypto_lookup_skcipher X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=26739535206e819946b0740347c09c94c4e48ba9;p=openwrt%2Fstaging%2Fblogic.git crypto: skcipher - Fix corner case in crypto_lookup_skcipher When the user explicitly states that they don't care whether the algorithm has been tested (type = CRYPTO_ALG_TESTED and mask = 0), there is a corner case where we may erroneously return ENOENT. This patch fixes it by correcting the logic in the test. Signed-off-by: Herbert Xu --- diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c index db201bca1581..b3dded4558c1 100644 --- a/crypto/ablkcipher.c +++ b/crypto/ablkcipher.c @@ -636,7 +636,7 @@ struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type, u32 mask) if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_GIVCIPHER) { - if ((alg->cra_flags ^ type ^ ~mask) & CRYPTO_ALG_TESTED) { + if (~alg->cra_flags & (type ^ ~mask) & CRYPTO_ALG_TESTED) { crypto_mod_put(alg); alg = ERR_PTR(-ENOENT); }