Skip to content

Commit e603a34

Browse files
anakryikoAlexei Starovoitov
authored andcommitted
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: 64276f0 ("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>
1 parent 7f9ee5f commit e603a34

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

tools/testing/selftests/bpf/prog_tests/arg_parsing.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,12 @@ static void test_parse_test_list_file(void)
146146

147147
init_test_filter_set(&set);
148148

149-
ASSERT_OK(parse_test_list_file(tmpfile, &set, true), "parse file");
149+
if (!ASSERT_OK(parse_test_list_file(tmpfile, &set, true), "parse file"))
150+
goto out_fclose;
151+
152+
if (!ASSERT_EQ(set.cnt, 4, "test count"))
153+
goto out_free_set;
150154

151-
ASSERT_EQ(set.cnt, 4, "test count");
152155
ASSERT_OK(strcmp("test_with_spaces", set.tests[0].name), "test 0 name");
153156
ASSERT_EQ(set.tests[0].subtest_cnt, 0, "test 0 subtest count");
154157
ASSERT_OK(strcmp("testA", set.tests[1].name), "test 1 name");
@@ -158,8 +161,8 @@ static void test_parse_test_list_file(void)
158161
ASSERT_OK(strcmp("testB", set.tests[2].name), "test 2 name");
159162
ASSERT_OK(strcmp("testC_no_eof_newline", set.tests[3].name), "test 3 name");
160163

164+
out_free_set:
161165
free_test_filter_set(&set);
162-
163166
out_fclose:
164167
fclose(fp);
165168
out_remove:

0 commit comments

Comments
 (0)