[LTP] [PATCH] syscalls/getrandom05: use tst_syscall
Cyril Hrubis
chrubis@suse.cz
Fri Dec 6 11:36:45 CET 2024
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.
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list