crypto: skcipher - add might_sleep() to skcipher_walk_virt()
authorEric Biggers <ebiggers@google.com>
Sat, 15 Dec 2018 20:41:53 +0000 (12:41 -0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 23 Dec 2018 03:52:44 +0000 (11:52 +0800)
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>
crypto/skcipher.c

index 17be8d9c714eb27973ae5a9bbe203cf611cb901e..41b4f7f27f454ea623a6e572130e0928363ef73e 100644 (file)
@@ -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);