[LTP] [PATCH] syscalls/getrandom05: use tst_syscall

Jan Stancek jstancek@redhat.com
Fri Dec 6 11:55:17 CET 2024


On Fri, Dec 6, 2024 at 11:36 AM Cyril Hrubis <chrubis@suse.cz> wrote:
>
> Hi!
> > With glibc-2.40 and recent kernel (6.12) the test uses
> > vdso implementation which runs into SIGSEGV for EFAULT test:
> >
> >   #0  __arch_chacha20_blocks_nostack () at arch/x86/entry/vdso/vgetrandom-chacha.S:146
> >   146             movups          state0,0x00(output)
> >
> >   (gdb) bt
> >   #0  __arch_chacha20_blocks_nostack () at arch/x86/entry/vdso/vgetrandom-chacha.S:146
> >   #1  0x00007fcd3ce6417a in __cvdso_getrandom_data (rng_info=0x7fcd3ce5f280, buffer=0xffffffffffffffff, len=64, flags=1, opaque_state=0x7fcd3ce5df00,
> >       opaque_len=<optimized out>) at arch/x86/entry/vdso/../../../../lib/vdso/getrandom.c:237
> >   #2  __cvdso_getrandom (buffer=<optimized out>, len=64, flags=1, opaque_state=0x7fcd3ce5df00, opaque_len=<optimized out>)
> >       at arch/x86/entry/vdso/../../../../lib/vdso/getrandom.c:259
> >   #3  __vdso_getrandom (buffer=0xffffffffffffffff, len=64, flags=1, opaque_state=0x7fcd3ce5df00, opaque_len=<optimized out>)
> >       at arch/x86/entry/vdso/vgetrandom.c:11
> >   #4  0x00007fcd3cc7faf3 in getrandom_vdso (buffer=0xffffffffffffffff, length=64, flags=0, cancel=<optimized out>)
> >       at ../sysdeps/unix/sysv/linux/getrandom.c:204
> >   #5  0x0000000000401ff7 in verify_getrandom (i=0) at getrandom05.c:40
> >
> > Change the test to use syscall implementation of getrandom().
> >
> > Signed-off-by: Jan Stancek <jstancek@redhat.com>
> > ---
> >  testcases/kernel/syscalls/getrandom/getrandom05.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/testcases/kernel/syscalls/getrandom/getrandom05.c b/testcases/kernel/syscalls/getrandom/getrandom05.c
> > index 92098deb723d..8f7ce45785c5 100644
> > --- a/testcases/kernel/syscalls/getrandom/getrandom05.c
> > +++ b/testcases/kernel/syscalls/getrandom/getrandom05.c
> > @@ -16,6 +16,7 @@
> >
> >  #include "tst_test.h"
> >  #include "lapi/getrandom.h"
> > +#include "lapi/syscalls.h"
> >
> >  static char buff_efault[64];
> >  static char buff_einval[64];
> > @@ -36,7 +37,7 @@ static void verify_getrandom(unsigned int i)
> >  {
> >       struct test_case_t *tc = &tcases[i];
> >
> > -     TST_EXP_FAIL2(getrandom(tc->buff, tc->size, tc->flag),
> > +     TST_EXP_FAIL2(tst_syscall(__NR_getrandom, tc->buff, tc->size, tc->flag),
> >               tc->expected_errno, "%s", tc->desc);
>
> This means that we will not cover the EINVAL error for VDSO anymore.
>
> Also the rest of the tests seems to use syscall only, which means that
> we will not test the VDSO that is going to be used by default. I suppose
> that we should add test variants to these testcases and run them both
> for libc getrandom() and the syscall and just skip the EFAULT here on
> glibc.

Yes, that would be preferable - just wanted to address this failure quickly.
I'll look at adding the variants to the test.

>
> --
> Cyril Hrubis
> chrubis@suse.cz
>



More information about the ltp mailing list