diff options
| author | Andrii Nakryiko <andrii@kernel.org> | 2025-10-14 13:20:37 -0700 | 
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2025-10-14 16:39:33 -0700 | 
| commit | e603a342cf7ecd64ef8f36207dfe1caacb9e2583 (patch) | |
| tree | 7ef4da3dcb3154c388e9541e8602d2920fc8548b | |
| parent | 7f9ee5fc97e14682e36fe22ae2654c07e4998b82 (diff) | |
selftests/bpf: make arg_parsing.c more robust to crashes
We started getting a crash in BPF CI, which seems to originate from
test_parse_test_list_file() test and is happening at this line:
  ASSERT_OK(strcmp("test_with_spaces", set.tests[0].name), "test 0 name");
One way we can crash there is if set.cnt zero, which is checked for with
ASSERT_EQ() above, but we proceed after this regardless of the outcome.
Instead of crashing, we should bail out with test failure early.
Similarly, if parse_test_list_file() fails, we shouldn't be even looking
at set, so bail even earlier if ASSERT_OK() fails.
Fixes: 64276f01dce8 ("selftests/bpf: Test_progs can read test lists from file")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Tested-by: Ihor Solodrai <ihor.solodrai@linux.dev>
Link: https://lore.kernel.org/r/20251014202037.72922-1-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/arg_parsing.c | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/tools/testing/selftests/bpf/prog_tests/arg_parsing.c b/tools/testing/selftests/bpf/prog_tests/arg_parsing.c index bb143de68875..fbf0d9c2f58b 100644 --- a/tools/testing/selftests/bpf/prog_tests/arg_parsing.c +++ b/tools/testing/selftests/bpf/prog_tests/arg_parsing.c @@ -146,9 +146,12 @@ static void test_parse_test_list_file(void)  	init_test_filter_set(&set); -	ASSERT_OK(parse_test_list_file(tmpfile, &set, true), "parse file"); +	if (!ASSERT_OK(parse_test_list_file(tmpfile, &set, true), "parse file")) +		goto out_fclose; + +	if (!ASSERT_EQ(set.cnt, 4, "test  count")) +		goto out_free_set; -	ASSERT_EQ(set.cnt, 4, "test  count");  	ASSERT_OK(strcmp("test_with_spaces", set.tests[0].name), "test 0 name");  	ASSERT_EQ(set.tests[0].subtest_cnt, 0, "test 0 subtest count");  	ASSERT_OK(strcmp("testA", set.tests[1].name), "test 1 name"); @@ -158,8 +161,8 @@ static void test_parse_test_list_file(void)  	ASSERT_OK(strcmp("testB", set.tests[2].name), "test 2 name");  	ASSERT_OK(strcmp("testC_no_eof_newline", set.tests[3].name), "test 3 name"); +out_free_set:  	free_test_filter_set(&set); -  out_fclose:  	fclose(fp);  out_remove: | 
