From: Herbert Xu Date: Thu, 23 Apr 2015 08:37:46 +0000 (+0800) Subject: crypto: aead - Fix corner case in crypto_lookup_aead X-Git-Tag: v4.1.12-92~24^2~103 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=25e25714c994f4804da135b7ab5cd5cabfd432b7;p=users%2Fjedix%2Flinux-maple.git crypto: aead - Fix corner case in crypto_lookup_aead 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 (cherry picked from commit 80f7b3552c1c925478a955fd4c700345beaf2982) Orabug: 24614549 Signed-off-by: Ethan Zhao Signed-off-by: Dhaval Giani --- diff --git a/crypto/aead.c b/crypto/aead.c index 222271070b491..d6ad0c66ee835 100644 --- a/crypto/aead.c +++ b/crypto/aead.c @@ -489,7 +489,7 @@ struct crypto_alg *crypto_lookup_aead(const char *name, u32 type, u32 mask) return alg; if (alg->cra_type == &crypto_aead_type) { - 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); }