summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2016-01-18 05:46:10 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2016-01-19 02:52:09 -0500
commit4f0414e54e4d1893c6f08260693f8ef84c929293 (patch)
tree09b5e55bdd1d609468fccbe31a3812c15ac2a020 /crypto
parente31835ad3abc6809703d3bbd2400bdd6285f8fea (diff)
crypto: algif_skcipher - Load TX SG list after waiting
We need to load the TX SG list in sendmsg(2) after waiting for incoming data, not before. Cc: stable@vger.kernel.org Reported-by: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Tested-by: Dmitry Vyukov <dvyukov@google.com>
Diffstat (limited to 'crypto')
-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 dfff8b0b56df..df86fb47c3ae 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,
647 647
648 lock_sock(sk); 648 lock_sock(sk);
649 while (msg_data_left(msg)) { 649 while (msg_data_left(msg)) {
650 sgl = list_first_entry(&ctx->tsgl,
651 struct skcipher_sg_list, list);
652 sg = sgl->sg;
653
654 while (!sg->length)
655 sg++;
656
657 if (!ctx->used) { 650 if (!ctx->used) {
658 err = skcipher_wait_for_data(sk, flags); 651 err = skcipher_wait_for_data(sk, flags);
659 if (err) 652 if (err)
@@ -674,6 +667,13 @@ static int skcipher_recvmsg_sync(struct socket *sock, struct msghdr *msg,
674 if (!used) 667 if (!used)
675 goto free; 668 goto free;
676 669
670 sgl = list_first_entry(&ctx->tsgl,
671 struct skcipher_sg_list, list);
672 sg = sgl->sg;
673
674 while (!sg->length)
675 sg++;
676
677 skcipher_request_set_crypt(&ctx->req, sg, ctx->rsgl.sg, used, 677 skcipher_request_set_crypt(&ctx->req, sg, ctx->rsgl.sg, used,
678 ctx->iv); 678 ctx->iv);
679 679