]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
crypto: skcipher - Fix corner case in crypto_lookup_skcipher
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 23 Apr 2015 08:34:47 +0000 (16:34 +0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Sun, 26 Feb 2017 05:34:38 +0000 (21:34 -0800)
Orabug: 25243093

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>
(cherry picked from commit 26739535206e819946b0740347c09c94c4e48ba9)
Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com>
crypto/ablkcipher.c

index 10cdb3480285eefb9f76c3821f7e7f621ace5d56..94863e6a41237375684a504360298bf22c6415e9 100644 (file)
@@ -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);
                }