Commit 523dffcc authored by Zijian Zhang's avatar Zijian Zhang Committed by Martin KaFai Lau
Browse files

selftests/bpf: Fix total_bytes in msg_loop_rx in test_sockmap



total_bytes in msg_loop_rx should also take push into account, otherwise
total_bytes will be a smaller value, which makes the msg_loop_rx end early.

Besides, total_bytes has already taken pop into account, so we don't need
to subtract some bytes from iov_buf in sendmsg_test. The additional
subtraction may make total_bytes a negative number, and msg_loop_rx will
just end without checking anything.

Fixes: 18d4e900 ("bpf: Selftests, improve test_sockmap total bytes counter")
Fixes: d6967214 ("selftests, bpf: Add one test for sockmap with strparser")
Signed-off-by: default avatarZijian Zhang <zijianzhang@bytedance.com>
Reviewed-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20241106222520.527076-4-zijianzhang@bytedance.com


Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
parent 40950314
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -606,8 +606,8 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
		}
		clock_gettime(CLOCK_MONOTONIC, &s->end);
	} else {
		float total_bytes, txmsg_pop_total, txmsg_push_total;
		int slct, recvp = 0, recv, max_fd = fd;
		float total_bytes, txmsg_pop_total;
		int fd_flags = O_NONBLOCK;
		struct timeval timeout;
		unsigned char k = 0;
@@ -628,10 +628,14 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt,
		total_bytes = (float)iov_length * (float)cnt;
		if (!opt->sendpage)
			total_bytes *= (float)iov_count;
		if (txmsg_apply)
		if (txmsg_apply) {
			txmsg_push_total = txmsg_end_push * (total_bytes / txmsg_apply);
			txmsg_pop_total = txmsg_pop * (total_bytes / txmsg_apply);
		else
		} else {
			txmsg_push_total = txmsg_end_push * cnt;
			txmsg_pop_total = txmsg_pop * cnt;
		}
		total_bytes += txmsg_push_total;
		total_bytes -= txmsg_pop_total;
		err = clock_gettime(CLOCK_MONOTONIC, &s->start);
		if (err < 0)
@@ -800,8 +804,6 @@ static int sendmsg_test(struct sockmap_options *opt)

	rxpid = fork();
	if (rxpid == 0) {
		if (txmsg_pop || txmsg_start_pop)
			iov_buf -= (txmsg_pop - txmsg_start_pop + 1);
		if (opt->drop_expected || txmsg_ktls_skb_drop)
			_exit(0);