Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31631c2a authored by Pengcheng Yang's avatar Pengcheng Yang Committed by Greg Kroah-Hartman
Browse files

bpf, sockmap: Fix data loss caused by using apply_bytes on ingress redirect



[ Upstream commit 9072931f020bfd907d6d89ee21ff1481cd78b407 ]

Use apply_bytes on ingress redirect, when apply_bytes is less than
the length of msg data, some data may be skipped and lost in
bpf_tcp_ingress().

If there is still data in the scatterlist that has not been consumed,
we cannot move the msg iter.

Fixes: 604326b4 ("bpf, sockmap: convert to generic sk_msg interface")
Signed-off-by: default avatarPengcheng Yang <yangpc@wangsu.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
Link: https://lore.kernel.org/bpf/1669718441-2654-4-git-send-email-yangpc@wangsu.com


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 7508b9f4
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -203,9 +203,12 @@ static int bpf_tcp_ingress(struct sock *sk, struct sk_psock *psock,
		tmp->sg.end = i;
		if (apply) {
			apply_bytes -= size;
			if (!apply_bytes)
			if (!apply_bytes) {
				if (sge->length)
					sk_msg_iter_var_prev(i);
				break;
			}
		}
	} while (i != msg->sg.end);

	if (!ret) {