]> www.infradead.org Git - users/hch/misc.git/commitdiff
selftests/bpf: make arg_parsing.c more robust to crashes
authorAndrii Nakryiko <andrii@kernel.org>
Tue, 14 Oct 2025 20:20:37 +0000 (13:20 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 14 Oct 2025 23:39:33 +0000 (16:39 -0700)
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>
tools/testing/selftests/bpf/prog_tests/arg_parsing.c

index bb143de68875cc09ca875725d1911b73ec82c37a..fbf0d9c2f58b3f1bc360c250da195d0505776c67 100644 (file)
@@ -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: