Merge tag 'pwm/for-3.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry...
[deliverable/linux.git] / crypto / algif_skcipher.c
index 37110fd68adfecb84a2b78663c937f6567106da1..0c8a1e5ccadf7d1ca16d9da3bd1042e3ff724177 100644 (file)
@@ -330,6 +330,7 @@ static int skcipher_sendmsg(struct kiocb *unused, struct socket *sock,
 
                sgl = list_entry(ctx->tsgl.prev, struct skcipher_sg_list, list);
                sg = sgl->sg;
+               sg_unmark_end(sg + sgl->cur);
                do {
                        i = sgl->cur;
                        plen = min_t(int, len, PAGE_SIZE);
@@ -355,6 +356,9 @@ static int skcipher_sendmsg(struct kiocb *unused, struct socket *sock,
                        sgl->cur++;
                } while (len && sgl->cur < MAX_SGL_ENTS);
 
+               if (!size)
+                       sg_mark_end(sg + sgl->cur - 1);
+
                ctx->merge = plen & (PAGE_SIZE - 1);
        }
 
@@ -401,6 +405,10 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
        ctx->merge = 0;
        sgl = list_entry(ctx->tsgl.prev, struct skcipher_sg_list, list);
 
+       if (sgl->cur)
+               sg_unmark_end(sgl->sg + sgl->cur - 1);
+
+       sg_mark_end(sgl->sg + sgl->cur);
        get_page(page);
        sg_set_page(sgl->sg + sgl->cur, page, size, offset);
        sgl->cur++;
@@ -439,14 +447,13 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
                while (!sg->length)
                        sg++;
 
-               used = ctx->used;
-               if (!used) {
+               if (!ctx->used) {
                        err = skcipher_wait_for_data(sk, flags);
                        if (err)
                                goto unlock;
                }
 
-               used = min_t(unsigned long, used, iov_iter_count(&msg->msg_iter));
+               used = min_t(unsigned long, ctx->used, iov_iter_count(&msg->msg_iter));
 
                used = af_alg_make_sg(&ctx->rsgl, &msg->msg_iter, used);
                err = used;
This page took 0.028176 seconds and 5 git commands to generate.