From: Geliang Tang tanggeliang@kylinos.cn
The values of recv and recvp in msg_loop may be negative, so it's necessary to check if they are positive before using them.
Fixes: 16962b2404ac ("bpf: sockmap, add selftests") Fixes: 753fb2ee0934 ("bpf: sockmap, add msg_peek tests to test_sockmap") Signed-off-by: Geliang Tang tanggeliang@kylinos.cn Acked-by: Yonghong Song yonghong.song@linux.dev --- tools/testing/selftests/bpf/test_sockmap.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c index 43612de44fbf..24b55da9d4af 100644 --- a/tools/testing/selftests/bpf/test_sockmap.c +++ b/tools/testing/selftests/bpf/test_sockmap.c @@ -680,7 +680,8 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, } }
- s->bytes_recvd += recv; + if (recv > 0) + s->bytes_recvd += recv;
if (opt->check_recved_len && s->bytes_recvd > total_bytes) { errno = EMSGSIZE; @@ -694,12 +695,14 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, iov_length * cnt : iov_length * iov_count;
- errno = msg_verify_data(&msg, recv, chunk_sz); - if (errno) { - perror("data verify msg failed"); - goto out_errno; + if (recv > 0) { + errno = msg_verify_data(&msg, recv, chunk_sz); + if (errno) { + perror("data verify msg failed"); + goto out_errno; + } } - if (recvp) { + if (recvp > 0) { errno = msg_verify_data(&msg_peek, recvp, chunk_sz);