summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-07-29 08:53:31 +0300
committerDavid S. Miller <davem@davemloft.net>2018-07-29 08:53:31 +0300
commitd339377c0447b08cd207ff21f621d5e9460c9b9f (patch)
tree6dd8ede8accd1eb18152b00f6004d7df14d42b37
parent37b81dc5ed31d497a6f1ab2bf8578f2343b349ef (diff)
parent2da19ed3e4a87db16c0f69039da9f17a9596c350 (diff)
downloadlinux-d339377c0447b08cd207ff21f621d5e9460c9b9f.tar.xz
Merge branch 'tls-Fix-improper-revert-in-zerocopy_from_iter'
Doron Roberts-Kedes says: ==================== tls: Fix improper revert in zerocopy_from_iter This series fixes the improper iov_iter_revert introcded in "tls: Fix zerocopy_from_iter iov handling". ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/tls/tls_sw.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index f9971717f7e0..6deceb7c56ba 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -263,7 +263,7 @@ static int zerocopy_from_iter(struct sock *sk, struct iov_iter *from,
int length, int *pages_used,
unsigned int *size_used,
struct scatterlist *to, int to_max_pages,
- bool charge, bool revert)
+ bool charge)
{
struct page *pages[MAX_SKB_FRAGS];
@@ -312,10 +312,10 @@ static int zerocopy_from_iter(struct sock *sk, struct iov_iter *from,
}
out:
+ if (rc)
+ iov_iter_revert(from, size - *size_used);
*size_used = size;
*pages_used = num_elem;
- if (revert)
- iov_iter_revert(from, size);
return rc;
}
@@ -417,21 +417,17 @@ alloc_encrypted:
&ctx->sg_plaintext_size,
ctx->sg_plaintext_data,
ARRAY_SIZE(ctx->sg_plaintext_data),
- true, false);
+ true);
if (ret)
goto fallback_to_reg_send;
copied += try_to_copy;
ret = tls_push_record(sk, msg->msg_flags, record_type);
- if (!ret)
- continue;
- if (ret < 0)
+ if (ret)
goto send_end;
+ continue;
- copied -= try_to_copy;
fallback_to_reg_send:
- iov_iter_revert(&msg->msg_iter,
- ctx->sg_plaintext_size - orig_size);
trim_sg(sk, ctx->sg_plaintext_data,
&ctx->sg_plaintext_num_elem,
&ctx->sg_plaintext_size,
@@ -836,7 +832,7 @@ int tls_sw_recvmsg(struct sock *sk,
err = zerocopy_from_iter(sk, &msg->msg_iter,
to_copy, &pages,
&chunk, &sgin[1],
- MAX_SKB_FRAGS, false, true);
+ MAX_SKB_FRAGS, false);
if (err < 0)
goto fallback_to_reg_recv;