summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2018-12-15 12:41:53 -0800
committerHerbert Xu <herbert@gondor.apana.org.au>2018-12-23 11:52:44 +0800
commitbb648291fc04c49197561939b8bfea0ada42bce3 (patch)
tree06d6e933c6689ac2c4699ab5f29454480cea4652
parentf9c9bdb5131eee60dc3b92e5126d4c0e291703e2 (diff)
downloadlinux-bb648291fc04c49197561939b8bfea0ada42bce3.tar.gz
linux-bb648291fc04c49197561939b8bfea0ada42bce3.tar.bz2
linux-bb648291fc04c49197561939b8bfea0ada42bce3.zip
crypto: skcipher - add might_sleep() to skcipher_walk_virt()
skcipher_walk_virt() can still sleep even with atomic=true, since that only affects the later calls to skcipher_walk_done(). But, skcipher_walk_virt() only has to allocate memory for some input data layouts, so incorrectly calling it with preemption disabled can go undetected. Use might_sleep() so that it's detected reliably. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--crypto/skcipher.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/crypto/skcipher.c b/crypto/skcipher.c
index 17be8d9c714e..41b4f7f27f45 100644
--- a/crypto/skcipher.c
+++ b/crypto/skcipher.c
@@ -474,6 +474,8 @@ int skcipher_walk_virt(struct skcipher_walk *walk,
{
int err;
+ might_sleep_if(req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP);
+
walk->flags &= ~SKCIPHER_WALK_PHYS;
err = skcipher_walk_skcipher(walk, req);