mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-28 14:34:17 -04:00
selftests/bpf: Silence array bounds warning in global_map_resize
When compiling BPF selftests with -O2, GCC reports an array bounds
violation warning in global_map_resize test:
In function ‘global_map_resize_bss_subtest’,
inlined from ‘test_global_map_resize’ at /bpf-next/tools/testing/selftests/bpf/prog_tests/global_map_resize.c:228:3:
/bpf-next/tools/testing/selftests/bpf/prog_tests/global_map_resize.c:64:33: error: array subscript 1 is above array bounds of ‘int[1]’ [-Werror=array-bounds=]
64 | skel->bss->array[i] = 1;
| ~~~~~~~~~~~~~~~~^~~
In file included from /bpf-next/tools/testing/selftests/bpf/prog_tests/global_map_resize.c:6:
./test_global_map_resize.skel.h: In function ‘test_global_map_resize’:
./test_global_map_resize.skel.h:44:21: note: while referencing ‘array’
44 | int array[1];
| ^~~~~
This is a false positive because `array` (a BPF map) has been resized
from within the BPF program. GCC doesn't know that so let us silence the
warning by accessing the array via a plain pointer.
Fixes: 08b0895675 ("libbpf: Selftests for resizing datasec maps")
Signed-off-by: Viktor Malik <vmalik@redhat.com>
Link: https://lore.kernel.org/bpf/57765bc465a27923c3c093eba222cc24d08d8c40.1784112948.git.vmalik@redhat.com
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
This commit is contained in:
committed by
Kumar Kartikeya Dwivedi
parent
eb5cd154f1
commit
dcd164ec67
@@ -23,6 +23,7 @@ static void global_map_resize_bss_subtest(void)
|
||||
struct bpf_map *map;
|
||||
const __u32 desired_sz = sizeof(skel->bss->sum) + sysconf(_SC_PAGE_SIZE) * 2;
|
||||
size_t array_len, actual_sz, new_sz;
|
||||
int *array;
|
||||
|
||||
skel = test_global_map_resize__open();
|
||||
if (!ASSERT_OK_PTR(skel, "test_global_map_resize__open"))
|
||||
@@ -58,10 +59,13 @@ static void global_map_resize_bss_subtest(void)
|
||||
goto teardown;
|
||||
|
||||
/* fill the newly resized array with ones,
|
||||
* skipping the first element which was previously set
|
||||
* skipping the first element which was previously set;
|
||||
* access through a plain pointer to avoid -Warray-bounds
|
||||
* since the array was resized beyond its declared length.
|
||||
*/
|
||||
array = skel->bss->array;
|
||||
for (int i = 1; i < array_len; i++)
|
||||
skel->bss->array[i] = 1;
|
||||
array[i] = 1;
|
||||
|
||||
/* set global const values before loading */
|
||||
skel->rodata->pid = getpid();
|
||||
|
||||
Reference in New Issue
Block a user