From: Jakub Kicinski kuba@kernel.org
[ Upstream commit e539a105f947b9db470fec39fe91d85fe737a432 ]
Adrien reports that incorrect data is transmitted when a single page straddles multiple records. We would transmit the same data in all iterations of the loop.
Reported-by: Adrien Moulin amoulin@corp.free.fr Link: https://lore.kernel.org/all/61481278.42813558.1677845235112.JavaMail.zimbra@... Fixes: c1318b39c7d3 ("tls: Add opt-in zerocopy mode of sendfile()") Tested-by: Adrien Moulin amoulin@corp.free.fr Reviewed-by: Tariq Toukan tariqt@nvidia.com Acked-by: Maxim Mikityanskiy maxtram95@gmail.com Link: https://lore.kernel.org/r/20230304192610.3818098-1-kuba@kernel.org Signed-off-by: Jakub Kicinski kuba@kernel.org Signed-off-by: Sasha Levin sashal@kernel.org --- net/tls/tls_device.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c index 6c593788dc250..a7cc4f9faac28 100644 --- a/net/tls/tls_device.c +++ b/net/tls/tls_device.c @@ -508,6 +508,8 @@ static int tls_push_data(struct sock *sk, zc_pfrag.offset = iter_offset.offset; zc_pfrag.size = copy; tls_append_frag(record, &zc_pfrag, copy); + + iter_offset.offset += copy; } else if (copy) { copy = min_t(size_t, copy, pfrag->size - pfrag->offset);