[LTP] [PATCH v4 00/16] fchroot: add fchroot() testing suite

Andrea Cervesato andrea.cervesato@suse.de
Mon Aug 31 10:00:01 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>
---
Changes in v4:
- restore fchroot08 commit
- fix descriptions
- improve setup() inside tests
- Link to v3: https://lore.kernel.org/20260828-fchroot-v3-0-656a2b515726@suse.com

Changes in v3:
- remove order specific tests inside the descriptions
- fchroot07: add child
- fix snprintf() possible overflows
- fix tests using TST_EXP_* macros
- use stat(".", ..) where it's needed
- Link to v2: https://lore.kernel.org/20260820-fchroot-v2-0-062ed20957a0@suse.com

Changes in v2:
- make description more readable
- invert fork() logic for the main test process
- fix the issues found by the agent
- Link to v1: https://lore.kernel.org/20260819-fchroot-v1-0-2dc2c3c3cf29@suse.com

To: Linux Test Project <ltp@lists.linux.it>

---
Andrea Cervesato (16):
      syscalls: add v7.3 syscall numbers
      syscalls: update outdated syscall entries
      [STAGING] 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       |  14 +++
 testcases/kernel/syscalls/fchroot/Makefile         |   7 ++
 testcases/kernel/syscalls/fchroot/fchroot01.c      |  58 ++++++++++
 testcases/kernel/syscalls/fchroot/fchroot02.c      |  75 ++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot03.c      |  72 ++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot04.c      |  69 +++++++++++
 testcases/kernel/syscalls/fchroot/fchroot05.c      |  75 ++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot06.c      | 126 +++++++++++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot07.c      |  59 ++++++++++
 .../kernel/syscalls/fchroot/fchroot07_child.c      |  16 +++
 testcases/kernel/syscalls/fchroot/fchroot08.c      |  69 +++++++++++
 testcases/kernel/syscalls/fchroot/fchroot09.c      |  86 ++++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot10.c      |  54 +++++++++
 testcases/kernel/syscalls/fchroot/fchroot11.c      |  70 ++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot12.c      |  85 ++++++++++++++
 testcases/kernel/syscalls/fchroot/fchroot13.c      |  63 +++++++++++
 35 files changed, 1079 insertions(+), 19 deletions(-)
---
base-commit: 3c0271a307bd765c2fd652c325762a90ddf5d46f
change-id: 20260819-fchroot-66115fd0d497

Best regards,
--  
Andrea Cervesato <andrea.cervesato@suse.com>



More information about the ltp mailing list