Message ID | 1718701782-18077-1-git-send-email-nobuhiro1.iwamatsu@toshiba.co.jp |
---|---|
State | Rejected |
Headers | show |
Series | lib: tst_fd: Add kernel version check to memfd_secret | expand |
Hi Nobuhiro, Cyril's suggestion to add fallback definitions sounds to me as a good idea: https://lore.kernel.org/ltp/ZnVCcU6jOU98DYek@yuki/ I guess that the best fix is to add fallback definitions for memfd_secret into include/lapi/syscalls/*.in files. That way we should get -1 and EINVAL properly even when kernel does not support the syscall. Could you please try that first? Kind regards, Petr PS: I'm sorry for the noise, posted previously to the old version, which I superseded in patchwork.
diff --git a/lib/tst_fd.c b/lib/tst_fd.c index 6538a098c..53f583fa0 100644 --- a/lib/tst_fd.c +++ b/lib/tst_fd.c @@ -255,8 +255,16 @@ static void open_memfd(struct tst_fd *fd) static void open_memfd_secret(struct tst_fd *fd) { + if ((tst_kvercmp(5, 14, 0)) < 0) { + tst_res(TINFO, "accept() on %s: Linux kernel version is before than v5.14", tst_fd_desc(fd)); + errno = ENOSYS; + goto skip; + } + fd->fd = syscall(__NR_memfd_secret, 0); + if (fd->fd < 0) { +skip: tst_res(TCONF | TERRNO, "Skipping %s", tst_fd_desc(fd)); }
memfd_secret is a syscall added since 5.14. On earlier kernels, tests such as accept03, readahead01 and splice07 that use memfd_secret fail. This adds a kernel version check to the tst_fd library when running tests using memfd_secret. Test log on linux-5.10.162/arm32 with version 20240524: ``` $ ./testcases/kernel/syscalls/accept/accept03 tst_test.c:1733: TINFO: LTP version: 20240524 tst_test.c:1617: TINFO: Timeout per run is 0h 00m 30s accept03.c:58: TPASS: accept() on file : ENOTSOCK (88) accept03.c:58: TPASS: accept() on O_PATH file : EBADF (9) accept03.c:58: TPASS: accept() on directory : ENOTSOCK (88) accept03.c:58: TPASS: accept() on /dev/zero : ENOTSOCK (88) accept03.c:58: TPASS: accept() on /proc/self/maps : ENOTSOCK (88) accept03.c:58: TPASS: accept() on pipe read end : ENOTSOCK (88) accept03.c:58: TPASS: accept() on pipe write end : ENOTSOCK (88) accept03.c:58: TPASS: accept() on epoll : ENOTSOCK (88) accept03.c:58: TPASS: accept() on eventfd : ENOTSOCK (88) accept03.c:58: TPASS: accept() on signalfd : ENOTSOCK (88) accept03.c:58: TPASS: accept() on timerfd : ENOTSOCK (88) accept03.c:58: TPASS: accept() on pidfd : ENOTSOCK (88) tst_fd.c:151: TCONF: Skipping fanotify: ENOSYS (38) accept03.c:58: TPASS: accept() on inotify : ENOTSOCK (88) tst_fd.c:170: TCONF: Skipping userfaultfd: ENOSYS (38) accept03.c:58: TPASS: accept() on perf event : ENOTSOCK (88) accept03.c:58: TPASS: accept() on io uring : ENOTSOCK (88) accept03.c:58: TPASS: accept() on bpf map : ENOTSOCK (88) accept03.c:58: TPASS: accept() on fsopen : ENOTSOCK (88) accept03.c:58: TPASS: accept() on fspick : ENOTSOCK (88) accept03.c:58: TPASS: accept() on open_tree : EBADF (9) accept03.c:58: TPASS: accept() on memfd : ENOTSOCK (88) tst_test.c:1677: TBROK: Test killed by SIGILL! Summary: passed 20 failed 0 broken 1 skipped 2 warnings 0 ``` Closed: #1145 Signed-off-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp> --- lib/tst_fd.c | 8 ++++++++ 1 file changed, 8 insertions(+)