summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2016-01-18 18:46:10 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-02-19 14:28:36 -0800
commit7420844c60979fe94b2a6fb1b1b5ee2147fbe71b (patch)
tree3a557875a6a1077d0ab644e3e9805ff42cff523d
parentcd614251ffa61463c49a3a9a1c16257a83a175de (diff)
downloadlinux-stable-7420844c60979fe94b2a6fb1b1b5ee2147fbe71b.tar.gz
linux-stable-7420844c60979fe94b2a6fb1b1b5ee2147fbe71b.tar.bz2
linux-stable-7420844c60979fe94b2a6fb1b1b5ee2147fbe71b.zip
crypto: algif_skcipher - Load TX SG list after waiting
commit 4f0414e54e4d1893c6f08260693f8ef84c929293 upstream. We need to load the TX SG list in sendmsg(2) after waiting for incoming data, not before. Reported-by: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Tested-by: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--crypto/algif_skcipher.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
index e3e9e132d2b2..ea5593ae027b 100644
--- a/crypto/algif_skcipher.c
+++ b/crypto/algif_skcipher.c
@@ -647,13 +647,6 @@ static int skcipher_recvmsg_sync(struct socket *sock, struct msghdr *msg,
lock_sock(sk);
while (msg_data_left(msg)) {
- sgl = list_first_entry(&ctx->tsgl,
- struct skcipher_sg_list, list);
- sg = sgl->sg;
-
- while (!sg->length)
- sg++;
-
if (!ctx->used) {
err = skcipher_wait_for_data(sk, flags);
if (err)
@@ -674,6 +667,13 @@ static int skcipher_recvmsg_sync(struct socket *sock, struct msghdr *msg,
if (!used)
goto free;
+ sgl = list_first_entry(&ctx->tsgl,
+ struct skcipher_sg_list, list);
+ sg = sgl->sg;
+
+ while (!sg->length)
+ sg++;
+
skcipher_request_set_crypt(&ctx->req, sg, ctx->rsgl.sg, used,
ctx->iv);