Re: [PATCH] bpf: selftests: global_funcs: check err_str before strstr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 19, 2020 at 8:19 AM Yonghong Song <yhs@xxxxxx> wrote:
>
>
>
> 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.

I'll test it with the very recent kernel on that architecture soon,
for sure. But it's not related to the patch.

>
> >
> > 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;

Yes, but I prefer to use NULL explicitly when I deal with pointers. It
demonstrates intention better. You also can simplify strstr() == 0
with !. Actually, strstr() returns char *, so comparation to 0
(totally legal by standard) breaks my feelings too :).

If you insist, I'll send v2 of course.

> >               found = true;
> >   out:
> >       printf(format, log_buf);
> >
>


-- 
WBR, Yauheni




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux