summaryrefslogtreecommitdiff
path: root/crypto/drbg.c
diff options
context:
space:
mode:
authorGilad Ben-Yossef <gilad@benyossef.com>2017-05-18 16:29:24 +0300
committerHerbert Xu <herbert@gondor.apana.org.au>2017-05-23 12:45:11 +0800
commitfbe4f68c5f4b4fc157b70217216ac44b8a01cf4e (patch)
treea0a066fec57b47156e4f52b5bf092ab0c1279211 /crypto/drbg.c
parent548b37ff50e23c4d92f3878e70cebc12dd365352 (diff)
downloadlinux-crypto-fbe4f68c5f4b4fc157b70217216ac44b8a01cf4e.tar.gz
linux-crypto-fbe4f68c5f4b4fc157b70217216ac44b8a01cf4e.zip
crypto: drbg - wait for crypto op not signal safe
drbg_kcapi_sym_ctr() was using wait_for_completion_interruptible() to wait for completion of async crypto op but if a signal occurs it may return before DMA ops of HW crypto provider finish, thus corrupting the output buffer. Resolve this by using wait_for_completion() instead. Reported-by: Eric Biggers <ebiggers3@gmail.com> Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> CC: stable@vger.kernel.org Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/drbg.c')
-rw-r--r--crypto/drbg.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/crypto/drbg.c b/crypto/drbg.c
index fa749f47..cdb27ac4 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -1767,9 +1767,8 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
break;
case -EINPROGRESS:
case -EBUSY:
- ret = wait_for_completion_interruptible(
- &drbg->ctr_completion);
- if (!ret && !drbg->ctr_async_err) {
+ wait_for_completion(&drbg->ctr_completion);
+ if (!drbg->ctr_async_err) {
reinit_completion(&drbg->ctr_completion);
break;
}