diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-12-10 10:45:28 +1100 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2007-02-07 09:20:58 +1100 |
commit | 39d18f6d8174abb5dc23bfb0342e472f2c8ef8ca (patch) | |
tree | b4bfa8ef802e807f6cbdcf80b6faa3d1cc194850 /crypto/blkcipher.c | |
parent | cd5b1e3a795536ffb7e6450fbce75a363a9841a0 (diff) | |
download | linux-crypto-39d18f6d8174abb5dc23bfb0342e472f2c8ef8ca.tar.gz linux-crypto-39d18f6d8174abb5dc23bfb0342e472f2c8ef8ca.zip |
[CRYPTO] all: Check for usage in hard IRQ context
Using blkcipher/hash crypto operations in hard IRQ context can lead
to random memory corruption due to the reuse of kmap_atomic slots.
Since crypto operations were never meant to be used in hard IRQ
contexts, this patch checks for such usage and returns an error
before kmap_atomic is performed.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/blkcipher.c')
-rw-r--r-- | crypto/blkcipher.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c index 6e93004f..cbb4c4e5 100644 --- a/crypto/blkcipher.c +++ b/crypto/blkcipher.c @@ -16,6 +16,7 @@ #include <linux/crypto.h> #include <linux/errno.h> +#include <linux/hardirq.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/scatterlist.h> @@ -313,6 +314,9 @@ static int blkcipher_walk_first(struct blkcipher_desc *desc, struct crypto_blkcipher *tfm = desc->tfm; unsigned int alignmask = crypto_blkcipher_alignmask(tfm); + if (WARN_ON_ONCE(in_irq())) + return -EDEADLK; + walk->nbytes = walk->total; if (unlikely(!walk->total)) return 0; |