Commit f90415e9 authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Daniel Borkmann

selftests/bpf: Make a copy of subtest name

test_progs never created a copy of subtest name, rather just stored
pointer to whatever string test provided. This is bad as that string
might be freed or modified by the end of subtest. Fix this by creating
a copy of given subtest name when subtest starts.
Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20191021033902.3856966-6-andriin@fb.com
parent dd4436bb
...@@ -20,7 +20,7 @@ struct prog_test_def { ...@@ -20,7 +20,7 @@ struct prog_test_def {
bool tested; bool tested;
bool need_cgroup_cleanup; bool need_cgroup_cleanup;
const char *subtest_name; char *subtest_name;
int subtest_num; int subtest_num;
/* store counts before subtest started */ /* store counts before subtest started */
...@@ -81,16 +81,17 @@ void test__end_subtest() ...@@ -81,16 +81,17 @@ void test__end_subtest()
fprintf(env.stdout, "#%d/%d %s:%s\n", fprintf(env.stdout, "#%d/%d %s:%s\n",
test->test_num, test->subtest_num, test->test_num, test->subtest_num,
test->subtest_name, sub_error_cnt ? "FAIL" : "OK"); test->subtest_name, sub_error_cnt ? "FAIL" : "OK");
free(test->subtest_name);
test->subtest_name = NULL;
} }
bool test__start_subtest(const char *name) bool test__start_subtest(const char *name)
{ {
struct prog_test_def *test = env.test; struct prog_test_def *test = env.test;
if (test->subtest_name) { if (test->subtest_name)
test__end_subtest(); test__end_subtest();
test->subtest_name = NULL;
}
test->subtest_num++; test->subtest_num++;
...@@ -104,7 +105,13 @@ bool test__start_subtest(const char *name) ...@@ -104,7 +105,13 @@ bool test__start_subtest(const char *name)
if (!should_run(&env.subtest_selector, test->subtest_num, name)) if (!should_run(&env.subtest_selector, test->subtest_num, name))
return false; return false;
test->subtest_name = name; test->subtest_name = strdup(name);
if (!test->subtest_name) {
fprintf(env.stderr,
"Subtest #%d: failed to copy subtest name!\n",
test->subtest_num);
return false;
}
env.test->old_error_cnt = env.test->error_cnt; env.test->old_error_cnt = env.test->error_cnt;
return true; return true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment