diff options
Diffstat (limited to 'crypto/algif_skcipher.c')
-rw-r--r-- | crypto/algif_skcipher.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c index 6fc12c3fc4b9..0c8a1e5ccadf 100644 --- a/crypto/algif_skcipher.c +++ b/crypto/algif_skcipher.c | |||
@@ -330,6 +330,7 @@ static int skcipher_sendmsg(struct kiocb *unused, struct socket *sock, | |||
330 | 330 | ||
331 | sgl = list_entry(ctx->tsgl.prev, struct skcipher_sg_list, list); | 331 | sgl = list_entry(ctx->tsgl.prev, struct skcipher_sg_list, list); |
332 | sg = sgl->sg; | 332 | sg = sgl->sg; |
333 | sg_unmark_end(sg + sgl->cur); | ||
333 | do { | 334 | do { |
334 | i = sgl->cur; | 335 | i = sgl->cur; |
335 | plen = min_t(int, len, PAGE_SIZE); | 336 | plen = min_t(int, len, PAGE_SIZE); |
@@ -355,6 +356,9 @@ static int skcipher_sendmsg(struct kiocb *unused, struct socket *sock, | |||
355 | sgl->cur++; | 356 | sgl->cur++; |
356 | } while (len && sgl->cur < MAX_SGL_ENTS); | 357 | } while (len && sgl->cur < MAX_SGL_ENTS); |
357 | 358 | ||
359 | if (!size) | ||
360 | sg_mark_end(sg + sgl->cur - 1); | ||
361 | |||
358 | ctx->merge = plen & (PAGE_SIZE - 1); | 362 | ctx->merge = plen & (PAGE_SIZE - 1); |
359 | } | 363 | } |
360 | 364 | ||
@@ -401,6 +405,10 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page, | |||
401 | ctx->merge = 0; | 405 | ctx->merge = 0; |
402 | sgl = list_entry(ctx->tsgl.prev, struct skcipher_sg_list, list); | 406 | sgl = list_entry(ctx->tsgl.prev, struct skcipher_sg_list, list); |
403 | 407 | ||
408 | if (sgl->cur) | ||
409 | sg_unmark_end(sgl->sg + sgl->cur - 1); | ||
410 | |||
411 | sg_mark_end(sgl->sg + sgl->cur); | ||
404 | get_page(page); | 412 | get_page(page); |
405 | sg_set_page(sgl->sg + sgl->cur, page, size, offset); | 413 | sg_set_page(sgl->sg + sgl->cur, page, size, offset); |
406 | sgl->cur++; | 414 | sgl->cur++; |