diff options
author | Eric Biggers <ebiggers@google.com> | 2018-12-15 12:41:53 -0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2018-12-23 11:52:44 +0800 |
commit | bb648291fc04c49197561939b8bfea0ada42bce3 (patch) | |
tree | 06d6e933c6689ac2c4699ab5f29454480cea4652 /crypto/skcipher.c | |
parent | f9c9bdb5131eee60dc3b92e5126d4c0e291703e2 (diff) | |
download | lwn-bb648291fc04c49197561939b8bfea0ada42bce3.tar.gz lwn-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>
Diffstat (limited to 'crypto/skcipher.c')
-rw-r--r-- | crypto/skcipher.c | 2 |
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); |