Linux Test Project
 help / color / mirror / Atom feed
* [LTP] [PATCH 00/16] fchroot: add fchroot() testing suite
@ 2026-08-19 21:24 Andrea Cervesato
  2026-08-19 21:24 ` [LTP] [PATCH 01/16] syscalls: add v7.3 syscall numbers Andrea Cervesato
                   ` (15 more replies)
  0 siblings, 16 replies; 21+ messages in thread
From: Andrea Cervesato @ 2026-08-19 21:24 UTC (permalink / raw)
  To: Linux Test Project

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>


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 21+ messages in thread
* [LTP] [PATCH v2 01/16] syscalls: add v7.3 syscall numbers
@ 2026-08-20  7:44 Andrea Cervesato
  2026-08-20  8:34 ` [LTP] " linuxtestproject.agent
  0 siblings, 1 reply; 21+ messages in thread
From: Andrea Cervesato @ 2026-08-20  7:44 UTC (permalink / raw)
  To: Linux Test Project

From: Andrea Cervesato <andrea.cervesato@suse.com>

Add listns (470), rseq_slice_yield (471) and fchroot (472), which are
reserved for all architectures during the Linux v7.3 development cycle.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 include/lapi/syscalls/arc.in         | 3 +++
 include/lapi/syscalls/arm.in         | 3 +++
 include/lapi/syscalls/arm64.in       | 3 +++
 include/lapi/syscalls/i386.in        | 3 +++
 include/lapi/syscalls/loongarch64.in | 3 +++
 include/lapi/syscalls/mips64.in      | 3 +++
 include/lapi/syscalls/mips64n32.in   | 3 +++
 include/lapi/syscalls/mipso32.in     | 3 +++
 include/lapi/syscalls/parisc.in      | 3 +++
 include/lapi/syscalls/powerpc.in     | 3 +++
 include/lapi/syscalls/powerpc64.in   | 3 +++
 include/lapi/syscalls/s390.in        | 3 +++
 include/lapi/syscalls/s390x.in       | 3 +++
 include/lapi/syscalls/sh.in          | 3 +++
 include/lapi/syscalls/sparc.in       | 3 +++
 include/lapi/syscalls/sparc64.in     | 3 +++
 include/lapi/syscalls/x86_64.in      | 3 +++
 17 files changed, 51 insertions(+)

diff --git a/include/lapi/syscalls/arc.in b/include/lapi/syscalls/arc.in
index 0f0fbef6b..96b14c1b9 100644
--- a/include/lapi/syscalls/arc.in
+++ b/include/lapi/syscalls/arc.in
@@ -347,3 +347,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/arm.in b/include/lapi/syscalls/arm.in
index d0238dec5..c4058e8de 100644
--- a/include/lapi/syscalls/arm.in
+++ b/include/lapi/syscalls/arm.in
@@ -420,3 +420,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/arm64.in b/include/lapi/syscalls/arm64.in
index c76930e20..26a61e830 100644
--- a/include/lapi/syscalls/arm64.in
+++ b/include/lapi/syscalls/arm64.in
@@ -323,3 +323,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/i386.in b/include/lapi/syscalls/i386.in
index 38ea71fb2..21d5da053 100644
--- a/include/lapi/syscalls/i386.in
+++ b/include/lapi/syscalls/i386.in
@@ -454,3 +454,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/loongarch64.in b/include/lapi/syscalls/loongarch64.in
index a1dfce79e..88e77ef8a 100644
--- a/include/lapi/syscalls/loongarch64.in
+++ b/include/lapi/syscalls/loongarch64.in
@@ -320,3 +320,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/mips64.in b/include/lapi/syscalls/mips64.in
index 436d5c681..3c19066b8 100644
--- a/include/lapi/syscalls/mips64.in
+++ b/include/lapi/syscalls/mips64.in
@@ -369,3 +369,6 @@ removexattrat 5466
 open_tree_attr 5467
 file_getattr 5468
 file_setattr 5469
+listns 5470
+rseq_slice_yield 5471
+fchroot 5472
diff --git a/include/lapi/syscalls/mips64n32.in b/include/lapi/syscalls/mips64n32.in
index 860a19c8b..0c539bd62 100644
--- a/include/lapi/syscalls/mips64n32.in
+++ b/include/lapi/syscalls/mips64n32.in
@@ -393,3 +393,6 @@ removexattrat 6466
 open_tree_attr 6467
 file_getattr 6468
 file_setattr 6469
+listns 6470
+rseq_slice_yield 6471
+fchroot 6472
diff --git a/include/lapi/syscalls/mipso32.in b/include/lapi/syscalls/mipso32.in
index 5e53e46ce..ecbe4d4b9 100644
--- a/include/lapi/syscalls/mipso32.in
+++ b/include/lapi/syscalls/mipso32.in
@@ -433,3 +433,6 @@ removexattrat 4466
 open_tree_attr 4467
 file_getattr 4468
 file_setattr 4469
+listns 4470
+rseq_slice_yield 4471
+fchroot 4472
diff --git a/include/lapi/syscalls/parisc.in b/include/lapi/syscalls/parisc.in
index 238756694..e84c3b344 100644
--- a/include/lapi/syscalls/parisc.in
+++ b/include/lapi/syscalls/parisc.in
@@ -402,3 +402,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/powerpc.in b/include/lapi/syscalls/powerpc.in
index 6911f9af9..9354dbe2b 100644
--- a/include/lapi/syscalls/powerpc.in
+++ b/include/lapi/syscalls/powerpc.in
@@ -444,3 +444,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/powerpc64.in b/include/lapi/syscalls/powerpc64.in
index 98190ba26..e4bef6838 100644
--- a/include/lapi/syscalls/powerpc64.in
+++ b/include/lapi/syscalls/powerpc64.in
@@ -416,3 +416,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/s390.in b/include/lapi/syscalls/s390.in
index a6cb85da8..4a11871b6 100644
--- a/include/lapi/syscalls/s390.in
+++ b/include/lapi/syscalls/s390.in
@@ -437,3 +437,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/s390x.in b/include/lapi/syscalls/s390x.in
index 31f3ec553..055a039fb 100644
--- a/include/lapi/syscalls/s390x.in
+++ b/include/lapi/syscalls/s390x.in
@@ -385,3 +385,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/sh.in b/include/lapi/syscalls/sh.in
index ac281acf8..29cd8f8df 100644
--- a/include/lapi/syscalls/sh.in
+++ b/include/lapi/syscalls/sh.in
@@ -431,3 +431,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/sparc.in b/include/lapi/syscalls/sparc.in
index ffc0d9f7a..ea2bfc9c1 100644
--- a/include/lapi/syscalls/sparc.in
+++ b/include/lapi/syscalls/sparc.in
@@ -435,3 +435,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/sparc64.in b/include/lapi/syscalls/sparc64.in
index 992bd307d..692652c3b 100644
--- a/include/lapi/syscalls/sparc64.in
+++ b/include/lapi/syscalls/sparc64.in
@@ -398,3 +398,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472
diff --git a/include/lapi/syscalls/x86_64.in b/include/lapi/syscalls/x86_64.in
index e9c0d0599..7d3d8163c 100644
--- a/include/lapi/syscalls/x86_64.in
+++ b/include/lapi/syscalls/x86_64.in
@@ -380,3 +380,6 @@ removexattrat 466
 open_tree_attr 467
 file_getattr 468
 file_setattr 469
+listns 470
+rseq_slice_yield 471
+fchroot 472

-- 
2.51.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2026-08-20  8:38 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19 21:24 [LTP] [PATCH 00/16] fchroot: add fchroot() testing suite Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH 01/16] syscalls: add v7.3 syscall numbers Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH 02/16] syscalls: update outdated syscall entries Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH 03/16] lapi: fallback fchroot() parameters Andrea Cervesato
2026-08-19 22:27   ` [LTP] syscalls: add v7.3 syscall numbers linuxtestproject.agent
2026-08-20  6:03     ` Andrea Cervesato via ltp
2026-08-19 21:24 ` [LTP] [PATCH STAGING 04/16] fchroot01: test fchroot() with a directory fd Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 05/16] fchroot02: test fchroot() invalid arguments Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 06/16] fchroot03: test fchroot() permission checks Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 07/16] fchroot04: test fchroot() into failfs as root Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 08/16] fchroot05: test failfs root can not be referenced Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 09/16] fchroot06: test path walks under failfs root Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 10/16] fchroot07: test execve blocked by " Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 11/16] fchroot08: test failfs root fork inheritance Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 12/16] fchroot09: test setns escape from failfs root Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 13/16] fchroot10: test failfs entry without no_new_privs Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 14/16] fchroot11: test failfs entry with no_new_privs Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 15/16] fchroot12: test failfs entry with shared fs_struct Andrea Cervesato
2026-08-19 21:24 ` [LTP] [PATCH STAGING 16/16] fchroot13: test failfs entry when chrooted Andrea Cervesato
  -- strict thread matches above, loose matches on Subject: below --
2026-08-20  7:44 [LTP] [PATCH v2 01/16] syscalls: add v7.3 syscall numbers Andrea Cervesato
2026-08-20  8:34 ` [LTP] " linuxtestproject.agent
2026-08-20  8:37   ` Andrea Cervesato via ltp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox