diff options
| author | Herbert Xu <herbert@gondor.apana.org.au> | 2007-12-01 05:47:07 -0500 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2008-01-10 16:16:39 -0500 |
| commit | 551a09a7a954f720067f207657bbbd26a3fe156a (patch) | |
| tree | 083daf83f8f7e67e7541f53bd888a2238ffe8b88 /include/linux/crypto.h | |
| parent | 5e553110f27ff77591ec7305c6216ad6949f7a95 (diff) | |
[CRYPTO] api: Sanitise mask when allocating ablkcipher/hash
When allocating ablkcipher/hash objects, we use a mask that's wider than
the usual type mask. This patch sanitises the mask supplied by the user
so we don't end up using a narrower mask which may lead to unintended
results.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include/linux/crypto.h')
| -rw-r--r-- | include/linux/crypto.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 48aa5959ab..ef7642ed3e 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
| @@ -532,6 +532,7 @@ static inline struct crypto_ablkcipher *crypto_alloc_ablkcipher( | |||
| 532 | const char *alg_name, u32 type, u32 mask) | 532 | const char *alg_name, u32 type, u32 mask) |
| 533 | { | 533 | { |
| 534 | type &= ~CRYPTO_ALG_TYPE_MASK; | 534 | type &= ~CRYPTO_ALG_TYPE_MASK; |
| 535 | mask &= ~CRYPTO_ALG_TYPE_MASK; | ||
| 535 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; | 536 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; |
| 536 | mask |= CRYPTO_ALG_TYPE_BLKCIPHER_MASK; | 537 | mask |= CRYPTO_ALG_TYPE_BLKCIPHER_MASK; |
| 537 | 538 | ||
| @@ -554,6 +555,7 @@ static inline int crypto_has_ablkcipher(const char *alg_name, u32 type, | |||
| 554 | u32 mask) | 555 | u32 mask) |
| 555 | { | 556 | { |
| 556 | type &= ~CRYPTO_ALG_TYPE_MASK; | 557 | type &= ~CRYPTO_ALG_TYPE_MASK; |
| 558 | mask &= ~CRYPTO_ALG_TYPE_MASK; | ||
| 557 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; | 559 | type |= CRYPTO_ALG_TYPE_BLKCIPHER; |
| 558 | mask |= CRYPTO_ALG_TYPE_BLKCIPHER_MASK; | 560 | mask |= CRYPTO_ALG_TYPE_BLKCIPHER_MASK; |
| 559 | 561 | ||
| @@ -1086,6 +1088,7 @@ static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name, | |||
| 1086 | u32 type, u32 mask) | 1088 | u32 type, u32 mask) |
| 1087 | { | 1089 | { |
| 1088 | type &= ~CRYPTO_ALG_TYPE_MASK; | 1090 | type &= ~CRYPTO_ALG_TYPE_MASK; |
| 1091 | mask &= ~CRYPTO_ALG_TYPE_MASK; | ||
| 1089 | type |= CRYPTO_ALG_TYPE_HASH; | 1092 | type |= CRYPTO_ALG_TYPE_HASH; |
| 1090 | mask |= CRYPTO_ALG_TYPE_HASH_MASK; | 1093 | mask |= CRYPTO_ALG_TYPE_HASH_MASK; |
| 1091 | 1094 | ||
| @@ -1105,6 +1108,7 @@ static inline void crypto_free_hash(struct crypto_hash *tfm) | |||
| 1105 | static inline int crypto_has_hash(const char *alg_name, u32 type, u32 mask) | 1108 | static inline int crypto_has_hash(const char *alg_name, u32 type, u32 mask) |
| 1106 | { | 1109 | { |
| 1107 | type &= ~CRYPTO_ALG_TYPE_MASK; | 1110 | type &= ~CRYPTO_ALG_TYPE_MASK; |
| 1111 | mask &= ~CRYPTO_ALG_TYPE_MASK; | ||
| 1108 | type |= CRYPTO_ALG_TYPE_HASH; | 1112 | type |= CRYPTO_ALG_TYPE_HASH; |
| 1109 | mask |= CRYPTO_ALG_TYPE_HASH_MASK; | 1113 | mask |= CRYPTO_ALG_TYPE_HASH_MASK; |
| 1110 | 1114 | ||
