When compiling test_maps selftest with GCC-8, it warns that an array might
be indexed with a negative value, which could cause a negative out of bound
access, depending on parameters of the function. This is the GCC-8 warning:

        gcc -Wall -O2 -I../../../include/uapi -I../../../lib -I../../../lib/bpf 
-I../../../../include/generated -DHAVE_GENHDR -I../../../include    test_maps.c 
/home/breno/Devel/linux/tools/testing/selftests/bpf/libbpf.a -lcap -lelf -lrt 
-lpthread -o /home/breno/Devel/linux/tools/testing/selftests/bpf/test_maps
        In file included from test_maps.c:16:
        test_maps.c: In function ‘run_all_tests’:
        test_maps.c:1079:10: warning: array subscript -1 is below array bounds 
of ‘pid_t[<Ube20> + 1]’ [-Warray-bounds]
           assert(waitpid(pid[i], &status, 0) == pid[i]);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
        test_maps.c:1059:6: warning: array subscript -1 is below array bounds 
of ‘pid_t[<Ube20> + 1]’ [-Warray-bounds]
           pid[i] = fork();
           ~~~^~~

This patch simply guarantees that the tasks variable is unsigned, thus, it
could never be a negative number, hence avoiding an out of bound access
warning.

Signed-off-by: Breno Leitao <lei...@debian.org>
---
 tools/testing/selftests/bpf/test_maps.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/test_maps.c 
b/tools/testing/selftests/bpf/test_maps.c
index e2b9eee37187..1714e26f4a72 100644
--- a/tools/testing/selftests/bpf/test_maps.c
+++ b/tools/testing/selftests/bpf/test_maps.c
@@ -641,7 +641,7 @@ static void test_stackmap(int task, void *data)
 #define SOCKMAP_PARSE_PROG "./sockmap_parse_prog.o"
 #define SOCKMAP_VERDICT_PROG "./sockmap_verdict_prog.o"
 #define SOCKMAP_TCP_MSG_PROG "./sockmap_tcp_msg_prog.o"
-static void test_sockmap(int tasks, void *data)
+static void test_sockmap(unsigned int tasks, void *data)
 {
        struct bpf_map *bpf_map_rx, *bpf_map_tx, *bpf_map_msg, *bpf_map_break;
        int map_fd_msg = 0, map_fd_rx = 0, map_fd_tx = 0, map_fd_break;
@@ -1261,7 +1261,7 @@ static void test_map_large(void)
        printf("Fork %d tasks to '" #FN "'\n", N); \
        __run_parallel(N, FN, DATA)
 
-static void __run_parallel(int tasks, void (*fn)(int task, void *data),
+static void __run_parallel(unsigned int tasks, void (*fn)(int task, void 
*data),
                           void *data)
 {
        pid_t pid[tasks];
-- 
2.19.0

Reply via email to