On 8/18/20 7:34 PM, Yauheni Kaliuta wrote:
The error path in libbpf.c:load_program() has calls to pr_warn() which ends up for global_funcs tests to test_global_funcs.c:libbpf_debug_print(). For the tests with no struct test_def::err_str initialized with a string, it causes call of strstr() with NULL as the second argument and it segfaults. Fix it by calling strstr() only for non-NULL err_str. The patch does not fix the test itself.
So this happens in older kernel, right? Could you clarify more in which kernel and what environment? It probably no need to fix the issue for really old kernel but some clarification will be good.
Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@xxxxxxxxxx> --- tools/testing/selftests/bpf/prog_tests/test_global_funcs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c b/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c index 25b068591e9a..6ad14c5465eb 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c +++ b/tools/testing/selftests/bpf/prog_tests/test_global_funcs.c @@ -19,7 +19,7 @@ static int libbpf_debug_print(enum libbpf_print_level level, log_buf = va_arg(args, char *); if (!log_buf) goto out; - if (strstr(log_buf, err_str) == 0) + if ((err_str != NULL) && (strstr(log_buf, err_str) == 0))
Looks good but the code can be simplified as if (err_str && strstr(log_buf, err_str) == 0) found = true;
found = true; out: printf(format, log_buf);