diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2015-04-23 04:34:47 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-04-26 02:33:15 -0400 |
commit | 26739535206e819946b0740347c09c94c4e48ba9 (patch) | |
tree | 678fc485236b97f801f33d2ee1c2b32eb84df2e1 /crypto/ablkcipher.c | |
parent | bd4a7c69aaed79ae1a299db8063fe4daf5e4a2f1 (diff) |
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 <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/ablkcipher.c')
-rw-r--r-- | crypto/ablkcipher.c | 2 |
1 files changed, 1 insertions, 1 deletions
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) | |||
636 | 636 | ||
637 | if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == | 637 | if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == |
638 | CRYPTO_ALG_TYPE_GIVCIPHER) { | 638 | CRYPTO_ALG_TYPE_GIVCIPHER) { |
639 | if ((alg->cra_flags ^ type ^ ~mask) & CRYPTO_ALG_TESTED) { | 639 | if (~alg->cra_flags & (type ^ ~mask) & CRYPTO_ALG_TESTED) { |
640 | crypto_mod_put(alg); | 640 | crypto_mod_put(alg); |
641 | alg = ERR_PTR(-ENOENT); | 641 | alg = ERR_PTR(-ENOENT); |
642 | } | 642 | } |