diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2016-01-18 05:46:10 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2016-01-19 02:52:09 -0500 |
commit | 4f0414e54e4d1893c6f08260693f8ef84c929293 (patch) | |
tree | 09b5e55bdd1d609468fccbe31a3812c15ac2a020 /crypto | |
parent | e31835ad3abc6809703d3bbd2400bdd6285f8fea (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.c | 14 |
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 | ||