|
@@ -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;
|
|
|
|