diff mbox

crypto: aead - Fix corner case in crypto_lookup_aead

Message ID 20150423083746.GA20206@gondor.apana.org.au (mailing list archive)
State Accepted
Delegated to: Herbert Xu
Headers show

Commit Message

Herbert Xu April 23, 2015, 8:37 a.m. UTC
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 <herbert@gondor.apana.org.au>
diff mbox

Patch

diff --git a/crypto/aead.c b/crypto/aead.c
index 2222710..d6ad0c6 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);
 		}