[LTP] [PATCH 00/16] fchroot: add fchroot() testing suite
Andrea Cervesato
andrea.cervesato@suse.de
Wed Aug 19 23:24:15 CEST 2026
fchroot() is a new syscall introduced in the Linux v7.3 development
cycle together with failfs, a kernel internal filesystem where every
operation fails with EOPNOTSUPP. The syscall is the fd-based
counterpart of chroot(2): it moves the process root to the directory
referenced by a file descriptor, or to the failfs root via the
FD_FAILFS_ROOT sentinel.
The series first updates the architecture syscall number tables and
adds lapi fallback definitions for the new fd sentinels, then adds 13
tests covering:
- the basic directory fd use case and the argument error paths
(EINVAL, EBADF, ENOTDIR)
- the permission checks, both execute permission and CAP_SYS_CHROOT
- entering failfs as root: EOPNOTSUPP on every absolute lookup,
unreachable working directory, root that can not be referenced or
pinned, path walks anchored at file descriptors, execve blocked,
fork inheritance and the setns() escape
- the unprivileged entry rules: no_new_privs, shared fs_struct and
the already chrooted case
fchroot() is not part of any released kernel yet, so the tests are
added to runtest/staging and each patch carries the [STAGING] prefix
as required by the LTP ground rules.
The testing suite creation has been assisted by GLM 5.3.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Andrea Cervesato (16):
syscalls: add v7.3 syscall numbers
syscalls: update outdated syscall entries
lapi: fallback fchroot() parameters
[STAGING] fchroot01: test fchroot() with a directory fd
[STAGING] fchroot02: test fchroot() invalid arguments
[STAGING] fchroot03: test fchroot() permission checks
[STAGING] fchroot04: test fchroot() into failfs as root
[STAGING] fchroot05: test failfs root can not be referenced
[STAGING] fchroot06: test path walks under failfs root
[STAGING] fchroot07: test execve blocked by failfs root
[STAGING] fchroot08: test failfs root fork inheritance
[STAGING] fchroot09: test setns escape from failfs root
[STAGING] fchroot10: test failfs entry without no_new_privs
[STAGING] fchroot11: test failfs entry with no_new_privs
[STAGING] fchroot12: test failfs entry with shared fs_struct
[STAGING] fchroot13: test failfs entry when chrooted
include/lapi/fcntl.h | 13 ++++
include/lapi/syscalls/arc.in | 3 +
include/lapi/syscalls/arm.in | 4 +-
include/lapi/syscalls/arm64.in | 3 +
include/lapi/syscalls/i386.in | 4 +-
include/lapi/syscalls/loongarch64.in | 3 +
include/lapi/syscalls/mips64.in | 5 +-
include/lapi/syscalls/mips64n32.in | 5 +-
include/lapi/syscalls/mipso32.in | 5 +-
include/lapi/syscalls/parisc.in | 4 +-
include/lapi/syscalls/powerpc.in | 4 +-
include/lapi/syscalls/powerpc64.in | 4 +-
include/lapi/syscalls/s390.in | 5 +-
include/lapi/syscalls/s390x.in | 5 +-
include/lapi/syscalls/sh.in | 4 +-
include/lapi/syscalls/sparc.in | 5 +-
include/lapi/syscalls/sparc64.in | 5 +-
include/lapi/syscalls/x86_64.in | 5 +-
runtest/staging | 14 +++++
testcases/kernel/syscalls/fchroot/.gitignore | 13 ++++
testcases/kernel/syscalls/fchroot/Makefile | 7 +++
testcases/kernel/syscalls/fchroot/fchroot01.c | 57 +++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot02.c | 80 ++++++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot03.c | 77 +++++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot04.c | 66 ++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot05.c | 75 ++++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot06.c | 90 +++++++++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot07.c | 71 +++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot08.c | 52 ++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot09.c | 70 +++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot10.c | 49 +++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot11.c | 74 ++++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot12.c | 82 ++++++++++++++++++++++++
testcases/kernel/syscalls/fchroot/fchroot13.c | 62 ++++++++++++++++++
34 files changed, 1006 insertions(+), 19 deletions(-)
---
base-commit: 567528e2f809c1309802433703c083bd15ab81a8
change-id: 20260819-fchroot-66115fd0d497
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
More information about the ltp
mailing list