[LTP] [PATCH] Check recvmmsg exists before entering fuzzy loop

Li Wang liwang@redhat.com
Thu Jan 10 04:39:38 CET 2019


Hi Richard,

Richard Palethorpe <rpalethorpe@suse.com> wrote:

> Avoid thread B entering infinite loop if recvmmsg doesn't exist causing
> tst_brk to be called and thread A to make an ungraceful exit.
>
> A more general fix can be added to tst_fuzzy_sync as well, but will take
> longer to develop.

Yes, now we just add a syscall checking in setup() as a workaround,
for the fzsync library issue we could take more time to find a best
solution after this new LTP releasing.

>
> Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
> Reported-by: Li Wang <liwang@redhat.com>
> ---
>  testcases/cve/cve-2016-7117.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/testcases/cve/cve-2016-7117.c b/testcases/cve/cve-2016-7117.c
> index 6290af077..effab083d 100644
> --- a/testcases/cve/cve-2016-7117.c
> +++ b/testcases/cve/cve-2016-7117.c
> @@ -99,6 +99,10 @@ static void setup(void)
>  {
>         fzsync_pair.min_samples = 10000;
>
> +       tst_syscall(__NR_recvmmsg);

maybe adding with useless parameters?
  tst_syscall(__NR_recvmmsg, 0 ,0, 0, 0, 0);

> +       if (errno == ENOSYS)
> +               tst_brk(TCONF, "recvmmsg not supported");

Seems errno check is not necessary here, the macro tst_syscall() has
already defined with tst_brk(TCONF,) calling when errno is ENOSYS.

FYI:

#define tst_syscall(NR, ...) ({ \\
        int tst_ret; \\
        if (NR == __LTP__NR_INVALID_SYSCALL) { \\
                errno = ENOSYS; \\
                tst_ret = -1; \\
        } else { \\
                tst_ret = syscall(NR, ##__VA_ARGS__); \\
        } \\
        if (tst_ret == -1 && errno == ENOSYS) { \\
                tst_brk(TCONF, "syscall(%d) " #NR " not supported", NR); \\
        } \\
        tst_ret; \\
})

> +
>         tst_fzsync_pair_init(&fzsync_pair);
>  }

>
> --
> 2.19.1
>


--
Regards,
Li Wang


More information about the ltp mailing list