Re: [PATCH] syscall02: add invalid syscall number test
Wei Gao via ltp <[email protected]>
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <[email protected]> |
On Mon, Jun 29, 2026 at 04:03:09PM +0200, Andrea Cervesato wrote: > From: Andrea Cervesato <andrea.cervesato-IBi9RG/[email protected]> > > Add a test verifying that syscall() returns ENOSYS when called with > unimplemented syscall numbers. The chosen numbers stay above the syscall > table and below the architecture-specific private ranges, so they are > reliably invalid on every supported architecture. > > Signed-off-by: Andrea Cervesato <andrea.cervesato-IBi9RG/[email protected]> > --- > runtest/syscalls | 1 + > testcases/kernel/syscalls/syscall/.gitignore | 1 + > testcases/kernel/syscalls/syscall/syscall02.c | 47 +++++++++++++++++++++++++++ > 3 files changed, 49 insertions(+) > > diff --git a/runtest/syscalls b/runtest/syscalls > index a021c79da49d4157c33187caed2dd3f0483759e0..8a777e61da1af59ba694e0bc5b5d92bb1d63754a 100644 > --- a/runtest/syscalls > +++ b/runtest/syscalls > @@ -1678,6 +1678,7 @@ sync_file_range01 sync_file_range01 > sync_file_range02 sync_file_range02 > > syscall01 syscall01 > +syscall02 syscall02 > > sysconf01 sysconf01 > > diff --git a/testcases/kernel/syscalls/syscall/.gitignore b/testcases/kernel/syscalls/syscall/.gitignore > index 74a081e40cb564e874e0f81478d3d1a0e95b6df4..fed1d81079450a7442023447285cd112924f7a10 100644 > --- a/testcases/kernel/syscalls/syscall/.gitignore > +++ b/testcases/kernel/syscalls/syscall/.gitignore > @@ -1 +1,2 @@ > /syscall01 > +/syscall02 > diff --git a/testcases/kernel/syscalls/syscall/syscall02.c b/testcases/kernel/syscalls/syscall/syscall02.c > new file mode 100644 > index 0000000000000000000000000000000000000000..3bd9fa8cdcca257e03b358749ee7a2b676d8720d > --- /dev/null > +++ b/testcases/kernel/syscalls/syscall/syscall02.c > @@ -0,0 +1,47 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Copyright (c) 2026 Andrea Cervesato <andrea.cervesato-IBi9RG/[email protected]> > + */ > + > +/*\ > + * Verify that :manpage:`syscall(2)` fails with ENOSYS when invoked with > + * invalid syscall numbers. > + * > + * The syscall number is dispatched as an unsigned value on Linux. A value is > + * reliably unimplemented on every supported architecture when it is: > + * > + * - above the syscall table > + * - below the architecture-specific private syscall ranges (e.g. ARM's > + * 0x0f0000 base) > + * - without the x32 ABI bit (0x40000000) set > + * > + * Such a number is routed to sys_ni_syscall and returns ENOSYS. > + */ > + > +#include <unistd.h> > +#include <sys/syscall.h> > + > +#include "tst_test.h" > + > +#define TC(x) {.scno = (long)(x), .desc = #x} > + > +static struct tcase { > + long scno; > + const char *desc; > +} tcases[] = { > + TC(0x8000), > + TC(0xf000), > + TC(0xfffe), > +}; I suggest add two more cases check: 1) -1 2) __NR_syscalls +1 (Base arch/powerpc/kernel/syscall.c) > + > +static void verify_syscall(unsigned int n) > +{ > + struct tcase *tc = &tcases[n]; > + > + TST_EXP_FAIL2(syscall(tc->scno), ENOSYS, "syscall(%s)", tc->desc); > +} > + > +static struct tst_test test = { > + .test = verify_syscall, > + .tcnt = ARRAY_SIZE(tcases), > +}; > > --- > base-commit: ad68429b9cfd55b233733e45e600ffafa1458ac5 > change-id: 20260629-invalid_syscalls-0476c52d7d0c > > Best regards, > -- > Andrea Cervesato <andrea.cervesato-IBi9RG/[email protected]> > > > -- > Mailing list info: https://lists.linux.it/listinfo/ltp -- Mailing list info: https://lists.linux.it/listinfo/ltp