public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v5 0/8] linux: Add new syscalls
@ 2022-06-06 13:44 Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 1/8] linux: Add fsopen Adhemerval Zanella
                   ` (7 more replies)
  0 siblings, 8 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

This set adds the new mount API added Linux 5.2: fsopen, fsmount,
move_mount, fsconfig, fspick, and open_tree.  It also adds
mount_setattr which was added on Linux 5.12.

This is complete redesign of the mount API to allow more flexibility
with mount points, specially when used along namespaces.

Adhemerval Zanella (8):
  linux: Add fsopen
  linux: Add fsmount
  linux: Add move_mount
  linux: Add fsconfig
  linux: Add fspick
  linux: Add open_tree
  linux: Add tst-mount to check for Linux new mount API
  linux: Add mount_setattr

 NEWS                                          |   4 +
 sysdeps/unix/sysv/linux/Makefile              |   9 ++
 sysdeps/unix/sysv/linux/Versions              |   7 ++
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |   7 ++
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |   7 ++
 sysdeps/unix/sysv/linux/arc/libc.abilist      |   7 ++
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |   7 ++
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |   7 ++
 sysdeps/unix/sysv/linux/csky/libc.abilist     |   7 ++
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |   7 ++
 sysdeps/unix/sysv/linux/i386/libc.abilist     |   7 ++
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |   7 ++
 .../sysv/linux/m68k/coldfire/libc.abilist     |   7 ++
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |   7 ++
 .../sysv/linux/microblaze/be/libc.abilist     |   7 ++
 .../sysv/linux/microblaze/le/libc.abilist     |   7 ++
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |   7 ++
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |   7 ++
 .../sysv/linux/mips/mips64/n32/libc.abilist   |   7 ++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |   7 ++
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |   7 ++
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |   7 ++
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |   7 ++
 .../powerpc/powerpc32/nofpu/libc.abilist      |   7 ++
 .../linux/powerpc/powerpc64/be/libc.abilist   |   7 ++
 .../linux/powerpc/powerpc64/le/libc.abilist   |   7 ++
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |   7 ++
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |   7 ++
 .../unix/sysv/linux/s390/s390-32/libc.abilist |   7 ++
 .../unix/sysv/linux/s390/s390-64/libc.abilist |   7 ++
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |   7 ++
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |   7 ++
 .../sysv/linux/sparc/sparc32/libc.abilist     |   7 ++
 .../sysv/linux/sparc/sparc64/libc.abilist     |   7 ++
 sysdeps/unix/sysv/linux/sys/mount.h           | 115 +++++++++++++++++
 sysdeps/unix/sysv/linux/syscalls.list         |   7 ++
 sysdeps/unix/sysv/linux/tst-mount-consts.py   |  61 +++++++++
 sysdeps/unix/sysv/linux/tst-mount.c           | 119 ++++++++++++++++++
 .../unix/sysv/linux/x86_64/64/libc.abilist    |   7 ++
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |   7 ++
 40 files changed, 553 insertions(+)
 create mode 100755 sysdeps/unix/sysv/linux/tst-mount-consts.py
 create mode 100644 sysdeps/unix/sysv/linux/tst-mount.c

-- 
2.34.1


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

* [PATCH v5 1/8] linux: Add fsopen
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-17 21:28   ` Carlos O'Donell
  2022-06-06 13:44 ` [PATCH v5 2/8] linux: Add fsmount Adhemerval Zanella
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on Linux 5.2 (24dcb3d90a1f67fe08c68a004af37df059d74005)
to start the process of preparing to create a superblock that will
then be mountable, using an fd as a context handle.
---
 NEWS                                          |  4 ++
 sysdeps/unix/sysv/linux/Makefile              |  8 +++
 sysdeps/unix/sysv/linux/Versions              |  1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
 .../sysv/linux/microblaze/be/libc.abilist     |  1 +
 .../sysv/linux/microblaze/le/libc.abilist     |  1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
 .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/sys/mount.h           |  8 +++
 sysdeps/unix/sysv/linux/syscalls.list         |  1 +
 sysdeps/unix/sysv/linux/tst-mount-consts.py   | 53 +++++++++++++++++++
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
 39 files changed, 108 insertions(+)
 create mode 100755 sysdeps/unix/sysv/linux/tst-mount-consts.py

diff --git a/NEWS b/NEWS
index 6a213775e6..a94e8c0124 100644
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,10 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
+* On Linux, the fsopen has been added.  It is a new mount API to allow
+  more flexibility on mount operations, specially when used along
+  namespaces.
+
 Deprecated and removed features, and other changes affecting compatibility:
 
 * Support for prelink will be removed in the next release; this includes
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 9e691fa103..7ffcf7ed83 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -256,6 +256,14 @@ $(objpfx)tst-pidfd-consts.out: ../sysdeps/unix/sysv/linux/tst-pidfd-consts.py
 	  < /dev/null > $@ 2>&1; $(evaluate-test)
 $(objpfx)tst-pidfd-consts.out: $(sysdeps-linux-python-deps)
 
+tests-special += $(objpfx)tst-mount-consts.out
+$(objpfx)tst-mount-consts.out: ../sysdeps/unix/sysv/linux/tst-mount-consts.py
+	$(sysdeps-linux-python) \
+	  ../sysdeps/unix/sysv/linux/tst-mount-consts.py \
+	    $(sysdeps-linux-python-cc) \
+	  < /dev/null > $@ 2>&1; $(evaluate-test)
+$(objpfx)tst-mount-consts.out: $(sysdeps-linux-python-deps)
+
 tst-rseq-disable-ENV = GLIBC_TUNABLES=glibc.pthread.rseq=0
 
 endif # $(subdir) == misc
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 66a995d3dc..9ff750ac09 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -300,6 +300,7 @@ libc {
     epoll_pwait2;
   }
   GLIBC_2.36 {
+    fsopen;
     pidfd_open;
     pidfd_getfd;
     pidfd_send_signal;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 027a1cf531..dedb69abda 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 703fcf5deb..67c7c43190 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 28c52dcbac..6b478b9461 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index c3adade814..45af999b89 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 33a90a248e..5abdfbd677 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 23a00cfc0b..1b560da21f 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 93e1068208..09397be929 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 356b05cae4..a3b95efa36 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 58e51aae4b..840aa669e5 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index ea4a19cbc2..8901429800 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 217717859c..5d3ccb254f 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 0e373d5c89..651d7e65f8 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 569d3e5556..c507fbd83b 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 7ccc7f93eb..eef92ef698 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index d197f0bd5d..92634e2910 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 4a8e857e53..5a6a1b8bcd 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index e0a170c030..0fdf5ff93b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 6f809245c9..e219863360 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index 1fc9e27c27..8fef5e2ab8 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
 GLIBC_2.35 write F
 GLIBC_2.35 writev F
 GLIBC_2.35 wscanf F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 01ba1dd9ec..d8a5c77db1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 263231a396..18cb35378d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 2c3c3af8fb..e144bb4167 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 4138874b38..1f283236cd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 5feae3245f..f76f47d017 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 3e6a4ae5ec..93517ae3d6 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 93c7b79b51..4d2c9ed035 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index b663fabeba..71bb7af685 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index abebf77944..a040860010 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index afd8a42895..10b7fa3560 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 56feda817d..e859089b64 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 00cc5b24d1..4347e399d6 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 174b5c7763..56da283d3f 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -134,6 +134,10 @@ enum
 };
 
 
+/* fsopen flags.  */
+#define FSOPEN_CLOEXEC          0x00000001
+
+
 __BEGIN_DECLS
 
 /* Mount a filesystem.  */
@@ -147,6 +151,10 @@ extern int umount (const char *__special_file) __THROW;
 /* Unmount a filesystem.  Force unmounting if FLAGS is set to MNT_FORCE.  */
 extern int umount2 (const char *__special_file, int __flags) __THROW;
 
+/* Open the filesystem referenced by FS_NAME so it can be configured for
+   mouting.  */
+extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index b12a0d56fa..a2919f433d 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
 eventfd		EXTRA	eventfd2	i:ii	eventfd
 execve		-	execve		i:spp	__execve	execve
 flock		-	flock		i:ii	__flock		flock
+fsopen		EXTRA	fsopen		i:sU	fsopen
 get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
 getpid          -       getpid          Ei:     __getpid        getpid
 getegid		-	getegid		Ei:	__getegid	getegid
diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
new file mode 100755
index 0000000000..162b01147d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python3
+# Test that glibc's sys/mount.h constants match the kernel's.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <https://www.gnu.org/licenses/>.
+
+import argparse
+import sys
+
+import glibcextract
+import glibcsyscalls
+
+
+def main():
+    """The main entry point."""
+    parser = argparse.ArgumentParser(
+        description="Test that glibc's sys/mount.h constants "
+        "match the kernel's.")
+    parser.add_argument('--cc', metavar='CC',
+                        help='C compiler (including options) to use')
+    args = parser.parse_args()
+
+    linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)
+    linux_version_glibc = (5, 16)
+    def check(cte, exclude=None):
+        return glibcextract.compare_macro_consts(
+                '#include <sys/mount.h>\n',
+                '#include <asm/fcntl.h>\n'
+                '#include <linux/mount.h>\n',
+                args.cc,
+                cte,
+                exclude,
+                linux_version_glibc > linux_version_headers,
+                linux_version_headers > linux_version_glibc)
+
+    status = check('FSOPEN_.*')
+    sys.exit(status)
+
+if __name__ == '__main__':
+    main()
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 4e729bdf56..65e5d2150d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index b5d7b9f1ed..4c6371b3c4 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
-- 
2.34.1


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

* [PATCH v5 2/8] linux: Add fsmount
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 1/8] linux: Add fsopen Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-07 16:14   ` Yann Droneaud
  2022-06-18  6:15   ` Carlos O'Donell
  2022-06-06 13:44 ` [PATCH v5 3/8] linux: Add move_mount Adhemerval Zanella
                   ` (5 subsequent siblings)
  7 siblings, 2 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on 5.2 (93766fbd2696c2c4453dd8e1070977e9cd4e6b6d) to
provide a way by which a filesystem opened with fsopen and configured
by a series of fsconfig calls can have a detached mount object
created for it.
---
 NEWS                                          |  4 ++--
 sysdeps/unix/sysv/linux/Versions              |  1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
 .../sysv/linux/microblaze/be/libc.abilist     |  1 +
 .../sysv/linux/microblaze/le/libc.abilist     |  1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
 .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/sys/mount.h           | 21 +++++++++++++++++++
 sysdeps/unix/sysv/linux/syscalls.list         |  1 +
 sysdeps/unix/sysv/linux/tst-mount-consts.py   |  6 +++++-
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
 38 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index a94e8c0124..51ca68f1da 100644
--- a/NEWS
+++ b/NEWS
@@ -29,8 +29,8 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
-* On Linux, the fsopen has been added.  It is a new mount API to allow
-  more flexibility on mount operations, specially when used along
+* On Linux, the fsopen and fsmound have been added.  It is a new mount API
+  to allow more flexibility on mount operations, specially when used along
   namespaces.
 
 Deprecated and removed features, and other changes affecting compatibility:
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 9ff750ac09..1d5b15aec4 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -300,6 +300,7 @@ libc {
     epoll_pwait2;
   }
   GLIBC_2.36 {
+    fsmount;
     fsopen;
     pidfd_open;
     pidfd_getfd;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index dedb69abda..bcad128067 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 67c7c43190..1d88271a25 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 6b478b9461..c4cc3c17f0 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 45af999b89..cfec9daf7a 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 5abdfbd677..b77416d32f 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 1b560da21f..76261943fb 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 09397be929..29352b69ac 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index a3b95efa36..9c465ec784 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 840aa669e5..ad1268e61f 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 8901429800..c63c140612 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 5d3ccb254f..937ac25d40 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 651d7e65f8..d144df6ace 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index c507fbd83b..87ff6f261f 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index eef92ef698..b0d2b88f14 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 92634e2910..2ed23ce297 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 5a6a1b8bcd..0048a23416 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 0fdf5ff93b..4b10b6bec2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index e219863360..8f905a8def 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index 8fef5e2ab8..60c2cdb6e2 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
 GLIBC_2.35 write F
 GLIBC_2.35 writev F
 GLIBC_2.35 wscanf F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index d8a5c77db1..ac5453d9c1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 18cb35378d..772b6d2587 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index e144bb4167..bcf1ed9a1c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 1f283236cd..cf4452775f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index f76f47d017..48aaada19d 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 93517ae3d6..e08ddc8627 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 4d2c9ed035..c315714ed8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 71bb7af685..9d83b3cf7d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index a040860010..8e10946936 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 10b7fa3560..6b4d8047c9 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index e859089b64..d222061590 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 4347e399d6..a8eb190e46 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 56da283d3f..9fa39c7d09 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -137,6 +137,22 @@ enum
 /* fsopen flags.  */
 #define FSOPEN_CLOEXEC          0x00000001
 
+/* fsmount flags.  */
+#define FSMOUNT_CLOEXEC         0x00000001
+
+/* mount attributes used on fsmount.  */
+#define MOUNT_ATTR_RDONLY       0x00000001 /* Mount read-only.  */
+#define MOUNT_ATTR_NOSUID       0x00000002 /* Ignore suid and sgid bits.  */
+#define MOUNT_ATTR_NODEV        0x00000004 /* Disallow access to device special files.  */
+#define MOUNT_ATTR_NOEXEC       0x00000008 /* Disallow program execution.  */
+#define MOUNT_ATTR__ATIME       0x00000070 /* Setting on how atime should be updated.  */
+#define MOUNT_ATTR_RELATIME     0x00000000 /* - Update atime relative to mtime/ctime.  */
+#define MOUNT_ATTR_NOATIME      0x00000010 /* - Do not update access times.  */
+#define MOUNT_ATTR_STRICTATIME  0x00000020 /* - Always perform atime updates  */
+#define MOUNT_ATTR_NODIRATIME   0x00000080 /* Do not update directory access times.  */
+#define MOUNT_ATTR_IDMAP        0x00100000 /* Idmap mount to @userns_fd in struct mount_attr.  */
+#define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
+
 
 __BEGIN_DECLS
 
@@ -155,6 +171,11 @@ extern int umount2 (const char *__special_file, int __flags) __THROW;
    mouting.  */
 extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
 
+/* Create a mount representation for the FD created by fsopen using
+   FLAGS with ATTR_FLAGS describing who the mount is to be performed.  */
+extern int fsmount (int __fd, unsigned int __flags,
+		    unsigned int __ms_flags) __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index a2919f433d..4ac6fe7659 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
 eventfd		EXTRA	eventfd2	i:ii	eventfd
 execve		-	execve		i:spp	__execve	execve
 flock		-	flock		i:ii	__flock		flock
+fsmount		EXTRA	fsmount		i:iUU	fsmount
 fsopen		EXTRA	fsopen		i:sU	fsopen
 get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
 getpid          -       getpid          Ei:     __getpid        getpid
diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
index 162b01147d..4d4a234f3a 100755
--- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
+++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
@@ -46,7 +46,11 @@ def main():
                 linux_version_glibc > linux_version_headers,
                 linux_version_headers > linux_version_glibc)
 
-    status = check('FSOPEN_.*')
+    status = max(
+        check('FSOPEN_.*'),
+        check('FSMOUNT_.*'),
+        # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
+        check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'))
     sys.exit(status)
 
 if __name__ == '__main__':
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 65e5d2150d..0293b05d12 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 4c6371b3c4..be216f4686 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
-- 
2.34.1


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

* [PATCH v5 3/8] linux: Add move_mount
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 1/8] linux: Add fsopen Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 2/8] linux: Add fsmount Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 4/8] linux: Add fsconfig Adhemerval Zanella
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on Linux 5.2 (2db154b3ea8e14b04fee23e3fdfd5e9d17fbc6ae)
as way t move a mount from one place to another and, in the next
commit, allow to attach an unattached mount tree.
---
 NEWS                                            |  6 +++---
 sysdeps/unix/sysv/linux/Versions                |  1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist        |  1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist       |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist       |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist       |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist       |  1 +
 .../unix/sysv/linux/m68k/coldfire/libc.abilist  |  1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist    |  1 +
 .../unix/sysv/linux/microblaze/be/libc.abilist  |  1 +
 .../unix/sysv/linux/microblaze/le/libc.abilist  |  1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist     |  1 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist   |  1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist     |  1 +
 .../sysv/linux/mips/mips64/n64/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist       |  1 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist    |  1 +
 .../linux/powerpc/powerpc32/nofpu/libc.abilist  |  1 +
 .../linux/powerpc/powerpc64/be/libc.abilist     |  1 +
 .../linux/powerpc/powerpc64/le/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist |  1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist   |  1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist      |  1 +
 .../unix/sysv/linux/sparc/sparc32/libc.abilist  |  1 +
 .../unix/sysv/linux/sparc/sparc64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/sys/mount.h             | 17 +++++++++++++++++
 sysdeps/unix/sysv/linux/syscalls.list           |  1 +
 sysdeps/unix/sysv/linux/tst-mount-consts.py     |  4 +++-
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist |  1 +
 38 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 51ca68f1da..8ecd5446b5 100644
--- a/NEWS
+++ b/NEWS
@@ -29,9 +29,9 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
-* On Linux, the fsopen and fsmound have been added.  It is a new mount API
-  to allow more flexibility on mount operations, specially when used along
-  namespaces.
+* On Linux, the fsopen, fsmount, and move_mount have been added.  It is a
+  new mount API to allow more flexibility on mount operations, specially
+  when used along namespaces.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 1d5b15aec4..26d552ba3b 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -302,6 +302,7 @@ libc {
   GLIBC_2.36 {
     fsmount;
     fsopen;
+    move_mount;
     pidfd_open;
     pidfd_getfd;
     pidfd_send_signal;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index bcad128067..8dba065b81 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2618,6 +2618,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 1d88271a25..08f4750022 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2715,6 +2715,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index c4cc3c17f0..75db763023 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2379,6 +2379,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index cfec9daf7a..fa33f317ac 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -498,6 +498,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index b77416d32f..dba2e4ce42 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -495,6 +495,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 76261943fb..e6ff921c29 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2654,6 +2654,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 29352b69ac..8a40cece83 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2603,6 +2603,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 9c465ec784..a89826049f 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2787,6 +2787,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index ad1268e61f..d1d96b7469 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2553,6 +2553,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index c63c140612..63a62f267a 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -499,6 +499,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 937ac25d40..f68325f9bc 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2730,6 +2730,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index d144df6ace..247af2075c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2703,6 +2703,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 87ff6f261f..b0ac3f9009 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2700,6 +2700,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index b0d2b88f14..b22cd6bf2f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2695,6 +2695,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 2ed23ce297..12fc2cce3e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2693,6 +2693,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 0048a23416..d3e96dfd43 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2701,6 +2701,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 4b10b6bec2..cb58ed4db0 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2604,6 +2604,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 8f905a8def..61ad58a599 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2742,6 +2742,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index 60c2cdb6e2..1260dc4e2e 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2125,6 +2125,7 @@ GLIBC_2.35 writev F
 GLIBC_2.35 wscanf F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index ac5453d9c1..363939762c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2757,6 +2757,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 772b6d2587..f512ad8baf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2790,6 +2790,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index bcf1ed9a1c..c9bdc9859c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2512,6 +2512,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index cf4452775f..f091be30bd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2814,6 +2814,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 48aaada19d..7ea73f9af8 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2381,6 +2381,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index e08ddc8627..333fa62714 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2581,6 +2581,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index c315714ed8..a867467b12 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2755,6 +2755,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 9d83b3cf7d..dbad5b3163 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2549,6 +2549,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 8e10946936..6f755cc173 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2610,6 +2610,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 6b4d8047c9..77d936aa3c 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2607,6 +2607,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index d222061590..09bb4363e1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2750,6 +2750,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index a8eb190e46..9df9cb6adb 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2576,6 +2576,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 9fa39c7d09..762b54878c 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -154,6 +154,16 @@ enum
 #define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
 
 
+/* move_mount flags.  */
+#define MOVE_MOUNT_F_SYMLINKS   0x00000001 /* Follow symlinks on from path */
+#define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
+#define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */
+#define MOVE_MOUNT_T_SYMLINKS   0x00000010 /* Follow symlinks on to path */
+#define MOVE_MOUNT_T_AUTOMOUNTS 0x00000020 /* Follow automounts on to path */
+#define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */
+#define MOVE_MOUNT_SET_GROUP    0x00000100 /* Set sharing group instead */
+
+
 __BEGIN_DECLS
 
 /* Mount a filesystem.  */
@@ -176,6 +186,13 @@ extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
 extern int fsmount (int __fd, unsigned int __flags,
 		    unsigned int __ms_flags) __THROW;
 
+/* Add the mounted FROM_DFD referenced by FROM_PATHNAME filesystem returned
+   by fsmount in the hierarchy in the place TO_DFD reference by TO_PATHNAME
+   using FLAGS.  */
+extern int move_mount (int __from_dfd, const char *__from_pathname,
+		       int __to_dfd, const char *__to_pathname,
+		       unsigned int flags) __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 4ac6fe7659..7368210cd1 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -37,6 +37,7 @@ mincore		-	mincore		i:aUV	mincore
 mlock		-	mlock		i:bU	mlock
 mlockall	-	mlockall	i:i	mlockall
 mount		EXTRA	mount		i:sssUp	__mount	mount
+move_mount	EXTRA	move_mount	i:isisU	move_mount
 munlock		-	munlock		i:aU	munlock
 munlockall	-	munlockall	i:	munlockall
 nfsservctl	EXTRA	nfsservctl	i:ipp	__compat_nfsservctl	nfsservctl@GLIBC_2.0:GLIBC_2.28
diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
index 4d4a234f3a..0e8289b833 100755
--- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
+++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
@@ -50,7 +50,9 @@ def main():
         check('FSOPEN_.*'),
         check('FSMOUNT_.*'),
         # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
-        check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'))
+        check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'),
+        # MOVE_MOUNT__MASK may vary depending of the kernel version.
+        check('MOVE_MOUNT_.*', 'MOVE_MOUNT__MASK'))
     sys.exit(status)
 
 if __name__ == '__main__':
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 0293b05d12..4829450ad0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2527,6 +2527,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index be216f4686..caea228bcb 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2633,6 +2633,7 @@ GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
-- 
2.34.1


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

* [PATCH v5 4/8] linux: Add fsconfig
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
                   ` (2 preceding siblings ...)
  2022-06-06 13:44 ` [PATCH v5 3/8] linux: Add move_mount Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 5/8] linux: Add fspick Adhemerval Zanella
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on Linux 5.2 (ecdab150fddb42fe6a739335257949220033b782)
as a way to a configure filesystem creation context and trigger
actions upon it, to be used in conjunction with fsopen, fspick and
fsmount.

The fsconfig_command commands are currently only defined as an enum,
so they can't be checked on tst-mount-consts.py with current test
support.
---
 NEWS                                          |  6 ++---
 sysdeps/unix/sysv/linux/Versions              |  1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
 .../sysv/linux/microblaze/be/libc.abilist     |  1 +
 .../sysv/linux/microblaze/le/libc.abilist     |  1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
 .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/sys/mount.h           | 26 +++++++++++++++++++
 sysdeps/unix/sysv/linux/syscalls.list         |  1 +
 sysdeps/unix/sysv/linux/tst-mount-consts.py   |  1 +
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
 38 files changed, 65 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index 8ecd5446b5..05140f0ac9 100644
--- a/NEWS
+++ b/NEWS
@@ -29,9 +29,9 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
-* On Linux, the fsopen, fsmount, and move_mount have been added.  It is a
-  new mount API to allow more flexibility on mount operations, specially
-  when used along namespaces.
+* On Linux, the fsopen, fsmount, move_mount, fsconfig have been added.
+  It is a new mount API to allow more flexibility on mount operations,
+  specially when used along namespaces.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 26d552ba3b..831a366492 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -300,6 +300,7 @@ libc {
     epoll_pwait2;
   }
   GLIBC_2.36 {
+    fsconfig;
     fsmount;
     fsopen;
     move_mount;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 8dba065b81..0b8699dd94 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 08f4750022..dbc552de45 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 75db763023..b8411014f0 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index fa33f317ac..618467399b 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index dba2e4ce42..3afbd61ba3 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index e6ff921c29..189835a12f 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 8a40cece83..41d645f3a0 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index a89826049f..c39a33655a 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index d1d96b7469..611b31fc1d 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 63a62f267a..8504a94c75 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index f68325f9bc..2cf5ca75d2 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 247af2075c..667098908d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index b0ac3f9009..a131265c9c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index b22cd6bf2f..9a083512f7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 12fc2cce3e..71b952dc6a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index d3e96dfd43..f824d143fa 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index cb58ed4db0..70ff16e752 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 61ad58a599..e3e30f9f72 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index 1260dc4e2e..c2c6c1678f 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
 GLIBC_2.35 write F
 GLIBC_2.35 writev F
 GLIBC_2.35 wscanf F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 363939762c..0ca95aa512 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index f512ad8baf..2256356cdb 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index c9bdc9859c..b27e3b9c7c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index f091be30bd..ac3897e8c6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 7ea73f9af8..f7abfd54e3 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 333fa62714..d4ba82b0a7 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index a867467b12..e15c8f1c50 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index dbad5b3163..3f74bf6af0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 6f755cc173..e9610718d2 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 77d936aa3c..754c495a6f 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 09bb4363e1..368a9177e3 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 9df9cb6adb..d644201962 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 762b54878c..61d79125fe 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -163,6 +163,27 @@ enum
 #define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */
 #define MOVE_MOUNT_SET_GROUP    0x00000100 /* Set sharing group instead */
 
+/* The type of fsconfig call made.   */
+enum fsconfig_command
+{
+  FSCONFIG_SET_FLAG       = 0,    /* Set parameter, supplying no value */
+#define FSCONFIG_SET_FLAG FSCONFIG_SET_FLAG
+  FSCONFIG_SET_STRING     = 1,    /* Set parameter, supplying a string value */
+#define FSCONFIG_SET_STRING FSCONFIG_SET_STRING
+  FSCONFIG_SET_BINARY     = 2,    /* Set parameter, supplying a binary blob value */
+#define FSCONFIG_SET_BINARY FSCONFIG_SET_BINARY
+  FSCONFIG_SET_PATH       = 3,    /* Set parameter, supplying an object by path */
+#define FSCONFIG_SET_PATH FSCONFIG_SET_PATH
+  FSCONFIG_SET_PATH_EMPTY = 4,    /* Set parameter, supplying an object by (empty) path */
+#define FSCONFIG_SET_PATH_EMPTY FSCONFIG_SET_PATH_EMPTY
+  FSCONFIG_SET_FD         = 5,    /* Set parameter, supplying an object by fd */
+#define FSCONFIG_SET_FD FSCONFIG_SET_FD
+  FSCONFIG_CMD_CREATE     = 6,    /* Invoke superblock creation */
+#define FSCONFIG_CMD_CREATE FSCONFIG_CMD_CREATE
+  FSCONFIG_CMD_RECONFIGURE = 7,   /* Invoke superblock reconfiguration */
+#define FSCONFIG_CMD_RECONFIGURE FSCONFIG_CMD_RECONFIGURE
+};
+
 
 __BEGIN_DECLS
 
@@ -193,6 +214,11 @@ extern int move_mount (int __from_dfd, const char *__from_pathname,
 		       int __to_dfd, const char *__to_pathname,
 		       unsigned int flags) __THROW;
 
+/* Set parameters and trigger CMD action on the FD context.  KEY, VALUE,
+   and AUX are used depending ng of the CMD.  */
+extern int fsconfig (int __fd, unsigned int __cmd, const char *__key,
+		     const char *__value, int __aux) __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 7368210cd1..da163c8ee5 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
 eventfd		EXTRA	eventfd2	i:ii	eventfd
 execve		-	execve		i:spp	__execve	execve
 flock		-	flock		i:ii	__flock		flock
+fsconfig	EXTRA	fsconfig	i:iUssi	fsconfig
 fsmount		EXTRA	fsmount		i:iUU	fsmount
 fsopen		EXTRA	fsopen		i:sU	fsopen
 get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
index 0e8289b833..20ba36db14 100755
--- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
+++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
@@ -46,6 +46,7 @@ def main():
                 linux_version_glibc > linux_version_headers,
                 linux_version_headers > linux_version_glibc)
 
+    # FS_CONFIG commads are only defined as enum on kernel header.
     status = max(
         check('FSOPEN_.*'),
         check('FSMOUNT_.*'),
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 4829450ad0..0ff913610c 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index caea228bcb..2aa67048ac 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
 GLIBC_2.35 _dl_find_object F
 GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
+GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 move_mount F
-- 
2.34.1


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

* [PATCH v5 5/8] linux: Add fspick
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
                   ` (3 preceding siblings ...)
  2022-06-06 13:44 ` [PATCH v5 4/8] linux: Add fsconfig Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-07 16:19   ` Yann Droneaud
  2022-06-06 13:44 ` [PATCH v5 6/8] linux: Add open_tree Adhemerval Zanella
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on Linux 5.2 (cf3cba4a429be43e5527a3f78859b1bfd9ebc5fb)
that can be used to pick an existing mountpoint into an filesystem
context which can thereafter be used to reconfigure a superblock
with fsconfig syscall.
---
 NEWS                                                 |  6 +++---
 sysdeps/unix/sysv/linux/Versions                     |  1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist         |  1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist           |  1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist             |  1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist          |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist          |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist            |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist            |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist            |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist            |  1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/microblaze/be/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/microblaze/le/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist |  1 +
 .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist           |  1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist            |  1 +
 .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist    |  1 +
 .../sysv/linux/powerpc/powerpc32/nofpu/libc.abilist  |  1 +
 .../sysv/linux/powerpc/powerpc64/be/libc.abilist     |  1 +
 .../sysv/linux/powerpc/powerpc64/le/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist           |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist           |  1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/sys/mount.h                  | 12 ++++++++++++
 sysdeps/unix/sysv/linux/syscalls.list                |  1 +
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist       |  1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist      |  1 +
 37 files changed, 50 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index 05140f0ac9..e8f88a5bf2 100644
--- a/NEWS
+++ b/NEWS
@@ -29,9 +29,9 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
-* On Linux, the fsopen, fsmount, move_mount, fsconfig have been added.
-  It is a new mount API to allow more flexibility on mount operations,
-  specially when used along namespaces.
+* On Linux, the fsopen, fsmount, move_mount, fsconfig, and fspick have
+  been added.  It is a new mount API to allow more flexibility on mount
+  operations, specially when used along namespaces.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 831a366492..7bc5861513 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -303,6 +303,7 @@ libc {
     fsconfig;
     fsmount;
     fsopen;
+    fspick;
     move_mount;
     pidfd_open;
     pidfd_getfd;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 0b8699dd94..4eaffedf7f 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2619,6 +2619,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index dbc552de45..6acce2a762 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2716,6 +2716,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index b8411014f0..9d254a3bc3 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2380,6 +2380,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 618467399b..95026bc448 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -499,6 +499,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 3afbd61ba3..096246378c 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -496,6 +496,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 189835a12f..166008f970 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2655,6 +2655,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 41d645f3a0..155cc6ed96 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2604,6 +2604,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index c39a33655a..67f7e36556 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2788,6 +2788,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 611b31fc1d..dbb75aa50f 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2554,6 +2554,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 8504a94c75..6d72cedf89 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -500,6 +500,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 2cf5ca75d2..7899efa0e0 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2731,6 +2731,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 667098908d..162a85a8a8 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2704,6 +2704,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index a131265c9c..a5e28ec2ae 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2701,6 +2701,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 9a083512f7..33627f4b67 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2696,6 +2696,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 71b952dc6a..333547fc56 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2694,6 +2694,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index f824d143fa..a46a1aefe7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2702,6 +2702,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 70ff16e752..b9b88321a7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2605,6 +2605,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index e3e30f9f72..0f2293d6a1 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2743,6 +2743,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index c2c6c1678f..812c05804e 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2126,6 +2126,7 @@ GLIBC_2.35 wscanf F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 0ca95aa512..568e5ab91f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2758,6 +2758,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 2256356cdb..bf5bab018d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2791,6 +2791,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index b27e3b9c7c..cffbb88886 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2513,6 +2513,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index ac3897e8c6..8dac584380 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2815,6 +2815,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index f7abfd54e3..431a9a30a1 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2382,6 +2382,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index d4ba82b0a7..ec86269bf7 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2582,6 +2582,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index e15c8f1c50..fe437d8e61 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2756,6 +2756,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 3f74bf6af0..e802e8da7f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2550,6 +2550,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index e9610718d2..c0a7196f5a 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2611,6 +2611,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 754c495a6f..45589bac28 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2608,6 +2608,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 368a9177e3..9b84bc0143 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2751,6 +2751,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index d644201962..362a22903a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2577,6 +2577,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 61d79125fe..84af5e51fc 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -163,6 +163,14 @@ enum
 #define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */
 #define MOVE_MOUNT_SET_GROUP    0x00000100 /* Set sharing group instead */
 
+
+/* fspick flags.  */
+#define FSPICK_CLOEXEC          0x00000001
+#define FSPICK_SYMLINK_NOFOLLOW 0x00000002
+#define FSPICK_NO_AUTOMOUNT     0x00000004
+#define FSPICK_EMPTY_PATH       0x00000008
+
+
 /* The type of fsconfig call made.   */
 enum fsconfig_command
 {
@@ -219,6 +227,10 @@ extern int move_mount (int __from_dfd, const char *__from_pathname,
 extern int fsconfig (int __fd, unsigned int __cmd, const char *__key,
 		     const char *__value, int __aux) __THROW;
 
+/* Equivalent of fopen for for an existing mount point.  */
+extern int fspick (int __dfd, const char *__path, unsigned int __flags)
+  __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index da163c8ee5..e9f39844df 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -15,6 +15,7 @@ flock		-	flock		i:ii	__flock		flock
 fsconfig	EXTRA	fsconfig	i:iUssi	fsconfig
 fsmount		EXTRA	fsmount		i:iUU	fsmount
 fsopen		EXTRA	fsopen		i:sU	fsopen
+fspick		EXTRA	fspick		i:isU	fspick
 get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
 getpid          -       getpid          Ei:     __getpid        getpid
 getegid		-	getegid		Ei:	__getegid	getegid
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 0ff913610c..93dab79cdc 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2528,6 +2528,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 2aa67048ac..24daa92e90 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2634,6 +2634,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
+GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
-- 
2.34.1


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

* [PATCH v5 6/8] linux: Add open_tree
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
                   ` (4 preceding siblings ...)
  2022-06-06 13:44 ` [PATCH v5 5/8] linux: Add fspick Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 7/8] linux: Add tst-mount to check for Linux new mount API Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 8/8] linux: Add mount_setattr Adhemerval Zanella
  7 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on Linux 5.2 (a07b20004793d8926f78d63eb5980559f7813404)
to return a O_PATH-opened file descriptor to an existing mountpoint.
---
 NEWS                                                     | 4 ++--
 sysdeps/unix/sysv/linux/Versions                         | 1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist             | 1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist               | 1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist                 | 1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist              | 1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist              | 1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist                | 1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist                | 1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist                | 1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist                | 1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist       | 1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist         | 1 +
 sysdeps/unix/sysv/linux/microblaze/be/libc.abilist       | 1 +
 sysdeps/unix/sysv/linux/microblaze/le/libc.abilist       | 1 +
 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist     | 1 +
 sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist   | 1 +
 sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist     | 1 +
 sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist     | 1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist               | 1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist                | 1 +
 .../unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist   | 1 +
 .../unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist | 1 +
 .../unix/sysv/linux/powerpc/powerpc64/be/libc.abilist    | 1 +
 .../unix/sysv/linux/powerpc/powerpc64/le/libc.abilist    | 1 +
 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist               | 1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist               | 1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist       | 1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist       | 1 +
 sysdeps/unix/sysv/linux/sys/mount.h                      | 9 +++++++++
 sysdeps/unix/sysv/linux/syscalls.list                    | 1 +
 sysdeps/unix/sysv/linux/tst-mount-consts.py              | 3 ++-
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist           | 1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist          | 1 +
 38 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index e8f88a5bf2..de12657449 100644
--- a/NEWS
+++ b/NEWS
@@ -29,8 +29,8 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
-* On Linux, the fsopen, fsmount, move_mount, fsconfig, and fspick have
-  been added.  It is a new mount API to allow more flexibility on mount
+* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, and open_tree
+  have been added.  It is a new mount API to allow more flexibility on mount
   operations, specially when used along namespaces.
 
 Deprecated and removed features, and other changes affecting compatibility:
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 7bc5861513..b70530ef40 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -305,6 +305,7 @@ libc {
     fsopen;
     fspick;
     move_mount;
+    open_tree;
     pidfd_open;
     pidfd_getfd;
     pidfd_send_signal;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 4eaffedf7f..2a666d8135 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2621,6 +2621,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 6acce2a762..41bd7c1959 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2718,6 +2718,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 9d254a3bc3..198fdab2f7 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2382,6 +2382,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 95026bc448..6fd4e75df2 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -501,6 +501,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 096246378c..3ec572b50f 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -498,6 +498,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 166008f970..94f3deb3e5 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2657,6 +2657,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 155cc6ed96..a7deaf3e26 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2606,6 +2606,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 67f7e36556..5f1a1bc4d0 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2790,6 +2790,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index dbb75aa50f..1af8a55836 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2556,6 +2556,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 6d72cedf89..ad3a4b4008 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -502,6 +502,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 7899efa0e0..87e76f33a0 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2733,6 +2733,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 162a85a8a8..73df42c7aa 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2706,6 +2706,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index a5e28ec2ae..5c2e936547 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2703,6 +2703,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 33627f4b67..45919d27d6 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2698,6 +2698,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 333547fc56..8321b0efac 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2696,6 +2696,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index a46a1aefe7..c7198646d2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2704,6 +2704,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index b9b88321a7..8b3cca2a54 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2607,6 +2607,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 0f2293d6a1..2f1595bb35 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2745,6 +2745,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index 812c05804e..d1d4e12d12 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2128,6 +2128,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 568e5ab91f..50c9fadaf0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2760,6 +2760,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index bf5bab018d..8998a560cd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2793,6 +2793,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index cffbb88886..bca46bdbe5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2515,6 +2515,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 8dac584380..97f6d96cd6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2817,6 +2817,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 431a9a30a1..f588745b28 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2384,6 +2384,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index ec86269bf7..1acf8a4c54 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2584,6 +2584,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index fe437d8e61..7c8b410f1a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2758,6 +2758,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index e802e8da7f..ba9317ee01 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2552,6 +2552,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index c0a7196f5a..75fa8834f1 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2613,6 +2613,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 45589bac28..4a4f8ff33f 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2610,6 +2610,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 9b84bc0143..d26671dba8 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2753,6 +2753,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 362a22903a..16c2a98ab5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2579,6 +2579,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 84af5e51fc..eb6705a091 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -21,6 +21,7 @@
 #ifndef _SYS_MOUNT_H
 #define _SYS_MOUNT_H	1
 
+#include <fcntl.h>
 #include <features.h>
 #include <sys/ioctl.h>
 
@@ -192,6 +193,10 @@ enum fsconfig_command
 #define FSCONFIG_CMD_RECONFIGURE FSCONFIG_CMD_RECONFIGURE
 };
 
+/* open_tree flags.  */
+#define OPEN_TREE_CLONE    1         /* Clone the target tree and attach the clone */
+#define OPEN_TREE_CLOEXEC  O_CLOEXEC /* Close the file on execve() */
+
 
 __BEGIN_DECLS
 
@@ -231,6 +236,10 @@ extern int fsconfig (int __fd, unsigned int __cmd, const char *__key,
 extern int fspick (int __dfd, const char *__path, unsigned int __flags)
   __THROW;
 
+/* Open the mount point FILENAME in directory DFD using FLAGS.  */
+extern int open_tree (int __dfd, const char *__filename, unsigned int __flags)
+  __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index e9f39844df..e5e2b528fd 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -43,6 +43,7 @@ move_mount	EXTRA	move_mount	i:isisU	move_mount
 munlock		-	munlock		i:aU	munlock
 munlockall	-	munlockall	i:	munlockall
 nfsservctl	EXTRA	nfsservctl	i:ipp	__compat_nfsservctl	nfsservctl@GLIBC_2.0:GLIBC_2.28
+open_tree	EXTRA	open_tree	i:i:s:U	open_tree
 pipe2		-	pipe2		i:fi	__pipe2		pipe2
 pidfd_open	EXTRA	pidfd_open	i:iU	pidfd_open
 pidfd_getfd	EXTRA	pidfd_getfd	i:iiU	pidfd_getfd
diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
index 20ba36db14..aa46b83ff0 100755
--- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
+++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
@@ -53,7 +53,8 @@ def main():
         # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
         check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'),
         # MOVE_MOUNT__MASK may vary depending of the kernel version.
-        check('MOVE_MOUNT_.*', 'MOVE_MOUNT__MASK'))
+        check('MOVE_MOUNT_.*', 'MOVE_MOUNT__MASK'),
+        check('OPEN_TREE_*'))
     sys.exit(status)
 
 if __name__ == '__main__':
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 93dab79cdc..bd7c4ef801 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2530,6 +2530,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 24daa92e90..1c7f60b41a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2636,6 +2636,7 @@ GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
 GLIBC_2.36 move_mount F
+GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
 GLIBC_2.36 pidfd_send_signal F
-- 
2.34.1


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

* [PATCH v5 7/8] linux: Add tst-mount to check for Linux new mount API
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
                   ` (5 preceding siblings ...)
  2022-06-06 13:44 ` [PATCH v5 6/8] linux: Add open_tree Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-06 13:44 ` [PATCH v5 8/8] linux: Add mount_setattr Adhemerval Zanella
  7 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

The new mount API was added on Linux 5.2 with six new syscalls:
fsopen, fsconfig, fsmount, move_mount, fspick, and open_tree.

The new test is far from extensive and only check for error path
and minimal funcionality to see if arguments are issued correctly.

Checked on x86_64-linux-gnu.
---
 sysdeps/unix/sysv/linux/Makefile    |  1 +
 sysdeps/unix/sysv/linux/tst-mount.c | 95 +++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/tst-mount.c

diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 7ffcf7ed83..2ccc92b6b8 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -130,6 +130,7 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
   tst-getauxval \
   tst-pidfd \
   tst-process_mrelease \
+  tst-mount \
   # tests
 
 # process_madvise requires CAP_SYS_ADMIN.
diff --git a/sysdeps/unix/sysv/linux/tst-mount.c b/sysdeps/unix/sysv/linux/tst-mount.c
new file mode 100644
index 0000000000..12a665f950
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/tst-mount.c
@@ -0,0 +1,95 @@
+/* Basic tests for the new Linux API added on Linux 5.2.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <https://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <support/check.h>
+#include <support/xunistd.h>
+#include <support/namespace.h>
+#include <sys/wait.h>
+#include <sys/mount.h>
+
+static void
+subprocess (void)
+{
+  int r = fsopen ("it_should_be_not_a_valid_mount", 0);
+  TEST_VERIFY_EXIT (r == -1);
+  if (errno == ENOSYS)
+    FAIL_UNSUPPORTED ("kernel does not support new mount API, skipping test");
+  TEST_COMPARE (errno, ENODEV);
+
+  int fd = fsopen ("tmpfs", FSOPEN_CLOEXEC);
+  TEST_VERIFY (fd != -1);
+
+  TEST_COMPARE (fsconfig (-1, FSCONFIG_SET_STRING, "size", "2048", 0), -1);
+  TEST_COMPARE (errno, EINVAL);
+
+  {
+    int r = fsconfig (fd, FSCONFIG_SET_STRING, "size", "2048", 0);
+    TEST_VERIFY (r != -1);
+    r = fsconfig (fd, FSCONFIG_CMD_CREATE, NULL, NULL, 0);
+    TEST_VERIFY (r != -1);
+  }
+
+  TEST_COMPARE (fsmount (-1, FSMOUNT_CLOEXEC, MOUNT_ATTR_NODEV), -1);
+  TEST_COMPARE (errno, EBADF);
+
+  int mfd = fsmount (fd, FSMOUNT_CLOEXEC, MOUNT_ATTR_NODEV);
+  TEST_VERIFY (mfd != -1);
+
+  TEST_COMPARE (move_mount (-1, "", AT_FDCWD, "/tmp", 0), -1);
+  TEST_COMPARE (errno, ENOENT);
+  {
+    int r = move_mount (mfd, "", AT_FDCWD, "/tmp", MOVE_MOUNT_F_EMPTY_PATH);
+    TEST_VERIFY (r != -1);
+  }
+
+  TEST_COMPARE (fspick (AT_FDCWD, "", 0), -1);
+  TEST_COMPARE (errno, ENOENT);
+  {
+    int pfd = fspick (AT_FDCWD, "/tmp", FSPICK_CLOEXEC);
+    TEST_VERIFY (pfd != -1);
+  }
+
+  TEST_COMPARE (open_tree (AT_FDCWD, "", 0), -1);
+  TEST_COMPARE (errno, ENOENT);
+  {
+    int fd_tree = open_tree (AT_FDCWD, "/tmp",
+			     OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC);
+    TEST_VERIFY (fd_tree != -1);
+  }
+
+  _exit (0);
+}
+
+static int
+do_test (void)
+{
+  support_become_root ();
+
+  pid_t pid = xfork ();
+  if (pid == 0)
+    subprocess ();
+
+  int status;
+  xwaitpid (pid, &status, 0);
+  TEST_VERIFY (WIFEXITED (status));
+
+  return 0;
+}
+
+#include <support/test-driver.c>
-- 
2.34.1


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

* [PATCH v5 8/8] linux: Add mount_setattr
  2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
                   ` (6 preceding siblings ...)
  2022-06-06 13:44 ` [PATCH v5 7/8] linux: Add tst-mount to check for Linux new mount API Adhemerval Zanella
@ 2022-06-06 13:44 ` Adhemerval Zanella
  2022-06-07 16:27   ` Yann Droneaud
  2022-06-07 16:34   ` Yann Droneaud
  7 siblings, 2 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-06 13:44 UTC (permalink / raw)
  To: libc-alpha, Carlos O'Donell

It was added on Linux 5.12 (2a1867219c7b27f928e2545782b86daaf9ad50bd)
to allow change the properties of a mount or a mount tree using file
descriptors which the new mount api is based on.

Checked on x86_64-linux-gnu.
---
 NEWS                                          |  6 ++--
 sysdeps/unix/sysv/linux/Versions              |  1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
 .../sysv/linux/microblaze/be/libc.abilist     |  1 +
 .../sysv/linux/microblaze/le/libc.abilist     |  1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
 .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/sys/mount.h           | 22 ++++++++++++++
 sysdeps/unix/sysv/linux/syscalls.list         |  1 +
 sysdeps/unix/sysv/linux/tst-mount.c           | 30 +++++++++++++++++--
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
 38 files changed, 87 insertions(+), 6 deletions(-)

diff --git a/NEWS b/NEWS
index de12657449..696de3962b 100644
--- a/NEWS
+++ b/NEWS
@@ -29,9 +29,9 @@ Major new features:
   memory is carried out in the context of the caller, using the caller's
   CPU affinity, and priority with CPU usage accounted to the caller.
 
-* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, and open_tree
-  have been added.  It is a new mount API to allow more flexibility on mount
-  operations, specially when used along namespaces.
+* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, open_tree,
+  and mount_setattr have been added.  It is a new mount API to allow more
+  flexibility on mount operations, specially when used along namespaces.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index b70530ef40..65d2ceda2c 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -305,6 +305,7 @@ libc {
     fsopen;
     fspick;
     move_mount;
+    mount_setattr;
     open_tree;
     pidfd_open;
     pidfd_getfd;
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 2a666d8135..16d34b55c6 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2620,6 +2620,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 41bd7c1959..3f794bea0f 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2717,6 +2717,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 198fdab2f7..072627810c 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2381,6 +2381,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 6fd4e75df2..dbd5f07e6e 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -500,6 +500,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 3ec572b50f..0f02d79faa 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -497,6 +497,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 94f3deb3e5..11d3b36a78 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2656,6 +2656,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index a7deaf3e26..5caa1321b1 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2605,6 +2605,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 5f1a1bc4d0..276d7d5619 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2789,6 +2789,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 1af8a55836..5e2249518e 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2555,6 +2555,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index ad3a4b4008..802469a5b9 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -501,6 +501,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 87e76f33a0..2f949397df 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2732,6 +2732,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 73df42c7aa..f63cc9cd4c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2705,6 +2705,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 5c2e936547..88d2b707f9 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2702,6 +2702,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 45919d27d6..6c2bc0ee78 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2697,6 +2697,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 8321b0efac..09c9980d95 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2695,6 +2695,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index c7198646d2..763920ea8f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2703,6 +2703,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 8b3cca2a54..36d30558c1 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2606,6 +2606,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 2f1595bb35..e4383fe464 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2744,6 +2744,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index d1d4e12d12..735a8eea7e 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2127,6 +2127,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 50c9fadaf0..715dd31afe 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2759,6 +2759,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 8998a560cd..ac4b69e5fc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2792,6 +2792,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index bca46bdbe5..fd42f1bc11 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2514,6 +2514,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 97f6d96cd6..24688916dd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2816,6 +2816,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index f588745b28..536eddf9f1 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2383,6 +2383,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 1acf8a4c54..214b4f1c87 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2583,6 +2583,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 7c8b410f1a..bd738a4eb8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2757,6 +2757,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index ba9317ee01..170361236a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2551,6 +2551,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 75fa8834f1..88fcd03300 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2612,6 +2612,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 4a4f8ff33f..f1115ef46d 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2609,6 +2609,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index d26671dba8..6063da1acf 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2752,6 +2752,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 16c2a98ab5..780d2c0987 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2578,6 +2578,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index eb6705a091..4929d84027 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -23,6 +23,8 @@
 
 #include <fcntl.h>
 #include <features.h>
+#include <stdint.h>
+#include <stddef.h>
 #include <sys/ioctl.h>
 
 #define BLOCK_SIZE	1024
@@ -155,6 +157,17 @@ enum
 #define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
 
 
+/* For mount_setattr.  */
+struct mount_attr
+{
+  uint64_t attr_set;
+  uint64_t attr_clr;
+  uint64_t propagation;
+  uint64_t userns_fd;
+};
+
+#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
+
 /* move_mount flags.  */
 #define MOVE_MOUNT_F_SYMLINKS   0x00000001 /* Follow symlinks on from path */
 #define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
@@ -240,6 +253,15 @@ extern int fspick (int __dfd, const char *__path, unsigned int __flags)
 extern int open_tree (int __dfd, const char *__filename, unsigned int __flags)
   __THROW;
 
+/* Change the mount proprieties of the mount or an entire mount tree.  If
+   PATH is a relative pathname, then it is interpreted relative to the directory
+   referred to by the file descriptor dirfd.  Otherwise if DFD is the special
+   value AT_FDCWD then PATH is interpreted relative to the current working
+   directory of the calling process.  */
+extern int mount_setattr (int __dfd, const char *__path, unsigned int __flags,
+			  struct mount_attr *__uattr, size_t __usize)
+  __THROW;
+
 __END_DECLS
 
 #endif /* _SYS_MOUNT_H */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index e5e2b528fd..f79a519d89 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -39,6 +39,7 @@ mincore		-	mincore		i:aUV	mincore
 mlock		-	mlock		i:bU	mlock
 mlockall	-	mlockall	i:i	mlockall
 mount		EXTRA	mount		i:sssUp	__mount	mount
+mount_setattr	EXTRA	mount_setattr	i:isUpi	mount_setattr
 move_mount	EXTRA	move_mount	i:isisU	move_mount
 munlock		-	munlock		i:aU	munlock
 munlockall	-	munlockall	i:	munlockall
diff --git a/sysdeps/unix/sysv/linux/tst-mount.c b/sysdeps/unix/sysv/linux/tst-mount.c
index 12a665f950..502d7e3433 100644
--- a/sysdeps/unix/sysv/linux/tst-mount.c
+++ b/sysdeps/unix/sysv/linux/tst-mount.c
@@ -23,6 +23,9 @@
 #include <sys/wait.h>
 #include <sys/mount.h>
 
+_Static_assert (sizeof (struct mount_attr) == MOUNT_ATTR_SIZE_VER0,
+		"sizeof (struct mount_attr) != MOUNT_ATTR_SIZE_VER0");
+
 static void
 subprocess (void)
 {
@@ -67,10 +70,31 @@ subprocess (void)
 
   TEST_COMPARE (open_tree (AT_FDCWD, "", 0), -1);
   TEST_COMPARE (errno, ENOENT);
+  int fd_tree = open_tree (AT_FDCWD, "/tmp",
+			   OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC);
+  TEST_VERIFY (fd_tree != -1);
+
   {
-    int fd_tree = open_tree (AT_FDCWD, "/tmp",
-			     OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC);
-    TEST_VERIFY (fd_tree != -1);
+    struct mount_attr attr =
+    {
+      .attr_set = MOUNT_ATTR_RDONLY,
+    };
+     mount_setattr (fd_tree, "", AT_EMPTY_PATH, &attr,
+			   sizeof (attr));
+    int r = mount_setattr (fd_tree, "", AT_EMPTY_PATH, &attr,
+			   sizeof (attr));
+    /* New mount API was added on 5.1, but mount_setattr on 5.12.  */
+    if (r == -1)
+      TEST_COMPARE (errno, ENOSYS);
+    else
+      {
+	TEST_COMPARE (mount_setattr (-1, "", AT_EMPTY_PATH, &attr,
+				     sizeof (attr)), -1);
+	TEST_COMPARE (errno, EBADF);
+	TEST_COMPARE (mount_setattr (fd_tree, "", AT_EMPTY_PATH, &attr,
+				     sizeof (attr) - 8), -1);
+	TEST_COMPARE (errno, EINVAL);
+      }
   }
 
   _exit (0);
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index bd7c4ef801..56cad609fe 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2529,6 +2529,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 1c7f60b41a..2ed242a62d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2635,6 +2635,7 @@ GLIBC_2.36 fsconfig F
 GLIBC_2.36 fsmount F
 GLIBC_2.36 fsopen F
 GLIBC_2.36 fspick F
+GLIBC_2.36 mount_setattr F
 GLIBC_2.36 move_mount F
 GLIBC_2.36 open_tree F
 GLIBC_2.36 pidfd_getfd F
-- 
2.34.1


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

* Re: [PATCH v5 2/8] linux: Add fsmount
  2022-06-06 13:44 ` [PATCH v5 2/8] linux: Add fsmount Adhemerval Zanella
@ 2022-06-07 16:14   ` Yann Droneaud
  2022-06-10 17:16     ` Adhemerval Zanella
  2022-06-18  6:15   ` Carlos O'Donell
  1 sibling, 1 reply; 21+ messages in thread
From: Yann Droneaud @ 2022-06-07 16:14 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha, Carlos O'Donell

Le 06/06/2022 à 15:44, Adhemerval Zanella via Libc-alpha a écrit :
> It was added on 5.2 (93766fbd2696c2c4453dd8e1070977e9cd4e6b6d) to
> provide a way by which a filesystem opened with fsopen and configured
> by a series of fsconfig calls can have a detached mount object
> created for it.
> ---
>   NEWS                                          |  4 ++--
>   sysdeps/unix/sysv/linux/Versions              |  1 +
>   sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
>   sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
>   sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
>   .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>   .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>   .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>   .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>   .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>   .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>   .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>   .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
>   .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>   .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>   .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
>   .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
>   .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
>   .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
>   .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>   .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
>   sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>   .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>   .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/sys/mount.h           | 21 +++++++++++++++++++
>   sysdeps/unix/sysv/linux/syscalls.list         |  1 +
>   sysdeps/unix/sysv/linux/tst-mount-consts.py   |  6 +++++-
>   .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
>   .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
>   38 files changed, 63 insertions(+), 3 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index a94e8c0124..51ca68f1da 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -29,8 +29,8 @@ Major new features:
>     memory is carried out in the context of the caller, using the caller's
>     CPU affinity, and priority with CPU usage accounted to the caller.
>   
> -* On Linux, the fsopen has been added.  It is a new mount API to allow
> -  more flexibility on mount operations, specially when used along
> +* On Linux, the fsopen and fsmound have been added.  It is a new mount API

fsopen and fsmount



> +  to allow more flexibility on mount operations, specially when used along
>     namespaces.
>   
>   Deprecated and removed features, and other changes affecting compatibility:
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 9ff750ac09..1d5b15aec4 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -300,6 +300,7 @@ libc {
>       epoll_pwait2;
>     }
>     GLIBC_2.36 {
> +    fsmount;
>       fsopen;
>       pidfd_open;
>       pidfd_getfd;
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index dedb69abda..bcad128067 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 67c7c43190..1d88271a25 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 6b478b9461..c4cc3c17f0 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 45af999b89..cfec9daf7a 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 5abdfbd677..b77416d32f 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 1b560da21f..76261943fb 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 09397be929..29352b69ac 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index a3b95efa36..9c465ec784 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 840aa669e5..ad1268e61f 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 8901429800..c63c140612 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 5d3ccb254f..937ac25d40 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 651d7e65f8..d144df6ace 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index c507fbd83b..87ff6f261f 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index eef92ef698..b0d2b88f14 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 92634e2910..2ed23ce297 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 5a6a1b8bcd..0048a23416 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 0fdf5ff93b..4b10b6bec2 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index e219863360..8f905a8def 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index 8fef5e2ab8..60c2cdb6e2 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
>   GLIBC_2.35 write F
>   GLIBC_2.35 writev F
>   GLIBC_2.35 wscanf F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index d8a5c77db1..ac5453d9c1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 18cb35378d..772b6d2587 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index e144bb4167..bcf1ed9a1c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 1f283236cd..cf4452775f 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index f76f47d017..48aaada19d 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 93517ae3d6..e08ddc8627 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 4d2c9ed035..c315714ed8 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 71bb7af685..9d83b3cf7d 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index a040860010..8e10946936 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 10b7fa3560..6b4d8047c9 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index e859089b64..d222061590 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 4347e399d6..a8eb190e46 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> index 56da283d3f..9fa39c7d09 100644
> --- a/sysdeps/unix/sysv/linux/sys/mount.h
> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> @@ -137,6 +137,22 @@ enum
>   /* fsopen flags.  */
>   #define FSOPEN_CLOEXEC          0x00000001
>   
> +/* fsmount flags.  */
> +#define FSMOUNT_CLOEXEC         0x00000001
> +
> +/* mount attributes used on fsmount.  */
> +#define MOUNT_ATTR_RDONLY       0x00000001 /* Mount read-only.  */
> +#define MOUNT_ATTR_NOSUID       0x00000002 /* Ignore suid and sgid bits.  */
> +#define MOUNT_ATTR_NODEV        0x00000004 /* Disallow access to device special files.  */
> +#define MOUNT_ATTR_NOEXEC       0x00000008 /* Disallow program execution.  */
> +#define MOUNT_ATTR__ATIME       0x00000070 /* Setting on how atime should be updated.  */
> +#define MOUNT_ATTR_RELATIME     0x00000000 /* - Update atime relative to mtime/ctime.  */
> +#define MOUNT_ATTR_NOATIME      0x00000010 /* - Do not update access times.  */
> +#define MOUNT_ATTR_STRICTATIME  0x00000020 /* - Always perform atime updates  */
> +#define MOUNT_ATTR_NODIRATIME   0x00000080 /* Do not update directory access times.  */
> +#define MOUNT_ATTR_IDMAP        0x00100000 /* Idmap mount to @userns_fd in struct mount_attr.  */
> +#define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
> +
>   
>   __BEGIN_DECLS
>   
> @@ -155,6 +171,11 @@ extern int umount2 (const char *__special_file, int __flags) __THROW;
>      mouting.  */
>   extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
>   
> +/* Create a mount representation for the FD created by fsopen using
> +   FLAGS with ATTR_FLAGS describing who the mount is to be performed.  */


describing how the mount


> +extern int fsmount (int __fd, unsigned int __flags,
> +		    unsigned int __ms_flags) __THROW;
> +
>   __END_DECLS
>   
>   #endif /* _SYS_MOUNT_H */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index a2919f433d..4ac6fe7659 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
>   eventfd		EXTRA	eventfd2	i:ii	eventfd
>   execve		-	execve		i:spp	__execve	execve
>   flock		-	flock		i:ii	__flock		flock
> +fsmount		EXTRA	fsmount		i:iUU	fsmount
>   fsopen		EXTRA	fsopen		i:sU	fsopen
>   get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>   getpid          -       getpid          Ei:     __getpid        getpid
> diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
> index 162b01147d..4d4a234f3a 100755
> --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
> +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
> @@ -46,7 +46,11 @@ def main():
>                   linux_version_glibc > linux_version_headers,
>                   linux_version_headers > linux_version_glibc)
>   
> -    status = check('FSOPEN_.*')
> +    status = max(
> +        check('FSOPEN_.*'),
> +        check('FSMOUNT_.*'),
> +        # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
> +        check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'))


should the mount_setattr stuf be added in the related patch instead ?


>       sys.exit(status)
>   
>   if __name__ == '__main__':
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 65e5d2150d..0293b05d12 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 4c6371b3c4..be216f4686 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
>   GLIBC_2.35 _dl_find_object F
>   GLIBC_2.35 epoll_pwait2 F
>   GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F



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

* Re: [PATCH v5 5/8] linux: Add fspick
  2022-06-06 13:44 ` [PATCH v5 5/8] linux: Add fspick Adhemerval Zanella
@ 2022-06-07 16:19   ` Yann Droneaud
  2022-06-10 17:19     ` Adhemerval Zanella
  0 siblings, 1 reply; 21+ messages in thread
From: Yann Droneaud @ 2022-06-07 16:19 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha, Carlos O'Donell

Le 06/06/2022 à 15:44, Adhemerval Zanella via Libc-alpha a écrit :
> It was added on Linux 5.2 (cf3cba4a429be43e5527a3f78859b1bfd9ebc5fb)
> that can be used to pick an existing mountpoint into an filesystem
> context which can thereafter be used to reconfigure a superblock
> with fsconfig syscall.
> ---
>   NEWS                                                 |  6 +++---
>   sysdeps/unix/sysv/linux/Versions                     |  1 +
>   sysdeps/unix/sysv/linux/aarch64/libc.abilist         |  1 +
>   sysdeps/unix/sysv/linux/alpha/libc.abilist           |  1 +
>   sysdeps/unix/sysv/linux/arc/libc.abilist             |  1 +
>   sysdeps/unix/sysv/linux/arm/be/libc.abilist          |  1 +
>   sysdeps/unix/sysv/linux/arm/le/libc.abilist          |  1 +
>   sysdeps/unix/sysv/linux/csky/libc.abilist            |  1 +
>   sysdeps/unix/sysv/linux/hppa/libc.abilist            |  1 +
>   sysdeps/unix/sysv/linux/i386/libc.abilist            |  1 +
>   sysdeps/unix/sysv/linux/ia64/libc.abilist            |  1 +
>   sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/microblaze/be/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/microblaze/le/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist |  1 +
>   .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist |  1 +
>   sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist |  1 +
>   sysdeps/unix/sysv/linux/nios2/libc.abilist           |  1 +
>   sysdeps/unix/sysv/linux/or1k/libc.abilist            |  1 +
>   .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist    |  1 +
>   .../sysv/linux/powerpc/powerpc32/nofpu/libc.abilist  |  1 +
>   .../sysv/linux/powerpc/powerpc64/be/libc.abilist     |  1 +
>   .../sysv/linux/powerpc/powerpc64/le/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist      |  1 +
>   sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist      |  1 +
>   sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/sh/be/libc.abilist           |  1 +
>   sysdeps/unix/sysv/linux/sh/le/libc.abilist           |  1 +
>   sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/sys/mount.h                  | 12 ++++++++++++
>   sysdeps/unix/sysv/linux/syscalls.list                |  1 +
>   sysdeps/unix/sysv/linux/x86_64/64/libc.abilist       |  1 +
>   sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist      |  1 +
>   37 files changed, 50 insertions(+), 3 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 05140f0ac9..e8f88a5bf2 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -29,9 +29,9 @@ Major new features:
>     memory is carried out in the context of the caller, using the caller's
>     CPU affinity, and priority with CPU usage accounted to the caller.
>   
> -* On Linux, the fsopen, fsmount, move_mount, fsconfig have been added.
> -  It is a new mount API to allow more flexibility on mount operations,
> -  specially when used along namespaces.
> +* On Linux, the fsopen, fsmount, move_mount, fsconfig, and fspick have
> +  been added.  It is a new mount API to allow more flexibility on mount
> +  operations, specially when used along namespaces.
>   
>   Deprecated and removed features, and other changes affecting compatibility:
>   
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 831a366492..7bc5861513 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -303,6 +303,7 @@ libc {
>       fsconfig;
>       fsmount;
>       fsopen;
> +    fspick;
>       move_mount;
>       pidfd_open;
>       pidfd_getfd;
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 0b8699dd94..4eaffedf7f 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2619,6 +2619,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index dbc552de45..6acce2a762 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2716,6 +2716,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index b8411014f0..9d254a3bc3 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2380,6 +2380,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 618467399b..95026bc448 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -499,6 +499,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 3afbd61ba3..096246378c 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -496,6 +496,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 189835a12f..166008f970 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2655,6 +2655,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 41d645f3a0..155cc6ed96 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2604,6 +2604,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index c39a33655a..67f7e36556 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2788,6 +2788,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 611b31fc1d..dbb75aa50f 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2554,6 +2554,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 8504a94c75..6d72cedf89 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -500,6 +500,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 2cf5ca75d2..7899efa0e0 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2731,6 +2731,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 667098908d..162a85a8a8 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2704,6 +2704,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index a131265c9c..a5e28ec2ae 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2701,6 +2701,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 9a083512f7..33627f4b67 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2696,6 +2696,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 71b952dc6a..333547fc56 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2694,6 +2694,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index f824d143fa..a46a1aefe7 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2702,6 +2702,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 70ff16e752..b9b88321a7 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2605,6 +2605,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index e3e30f9f72..0f2293d6a1 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2743,6 +2743,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index c2c6c1678f..812c05804e 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2126,6 +2126,7 @@ GLIBC_2.35 wscanf F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 0ca95aa512..568e5ab91f 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2758,6 +2758,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 2256356cdb..bf5bab018d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2791,6 +2791,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index b27e3b9c7c..cffbb88886 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2513,6 +2513,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index ac3897e8c6..8dac584380 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2815,6 +2815,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index f7abfd54e3..431a9a30a1 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2382,6 +2382,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index d4ba82b0a7..ec86269bf7 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2582,6 +2582,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index e15c8f1c50..fe437d8e61 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2756,6 +2756,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 3f74bf6af0..e802e8da7f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2550,6 +2550,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index e9610718d2..c0a7196f5a 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2611,6 +2611,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 754c495a6f..45589bac28 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2608,6 +2608,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 368a9177e3..9b84bc0143 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2751,6 +2751,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index d644201962..362a22903a 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2577,6 +2577,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> index 61d79125fe..84af5e51fc 100644
> --- a/sysdeps/unix/sysv/linux/sys/mount.h
> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> @@ -163,6 +163,14 @@ enum
>   #define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */
>   #define MOVE_MOUNT_SET_GROUP    0x00000100 /* Set sharing group instead */
>   
> +
> +/* fspick flags.  */
> +#define FSPICK_CLOEXEC          0x00000001
> +#define FSPICK_SYMLINK_NOFOLLOW 0x00000002
> +#define FSPICK_NO_AUTOMOUNT     0x00000004
> +#define FSPICK_EMPTY_PATH       0x00000008
> +
> +
>   /* The type of fsconfig call made.   */
>   enum fsconfig_command
>   {
> @@ -219,6 +227,10 @@ extern int move_mount (int __from_dfd, const char *__from_pathname,
>   extern int fsconfig (int __fd, unsigned int __cmd, const char *__key,
>   		     const char *__value, int __aux) __THROW;
>   
> +/* Equivalent of fopen for for an existing mount point.  */


Equivalent of fsopen for an existing mount point


> +extern int fspick (int __dfd, const char *__path, unsigned int __flags)
> +  __THROW;
> +
>   __END_DECLS
>   
>   #endif /* _SYS_MOUNT_H */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index da163c8ee5..e9f39844df 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -15,6 +15,7 @@ flock		-	flock		i:ii	__flock		flock
>   fsconfig	EXTRA	fsconfig	i:iUssi	fsconfig
>   fsmount		EXTRA	fsmount		i:iUU	fsmount
>   fsopen		EXTRA	fsopen		i:sU	fsopen
> +fspick		EXTRA	fspick		i:isU	fspick
>   get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>   getpid          -       getpid          Ei:     __getpid        getpid
>   getegid		-	getegid		Ei:	__getegid	getegid
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 0ff913610c..93dab79cdc 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2528,6 +2528,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 2aa67048ac..24daa92e90 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2634,6 +2634,7 @@ GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>   GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
> +GLIBC_2.36 fspick F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 pidfd_getfd F
>   GLIBC_2.36 pidfd_open F



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

* Re: [PATCH v5 8/8] linux: Add mount_setattr
  2022-06-06 13:44 ` [PATCH v5 8/8] linux: Add mount_setattr Adhemerval Zanella
@ 2022-06-07 16:27   ` Yann Droneaud
  2022-06-10 17:21     ` Adhemerval Zanella
  2022-06-07 16:34   ` Yann Droneaud
  1 sibling, 1 reply; 21+ messages in thread
From: Yann Droneaud @ 2022-06-07 16:27 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha, Carlos O'Donell

Le 06/06/2022 à 15:44, Adhemerval Zanella via Libc-alpha a écrit :
> It was added on Linux 5.12 (2a1867219c7b27f928e2545782b86daaf9ad50bd)
> to allow change the properties of a mount or a mount tree using file
> descriptors which the new mount api is based on.
>
> Checked on x86_64-linux-gnu.
> ---
>   NEWS                                          |  6 ++--
>   sysdeps/unix/sysv/linux/Versions              |  1 +
>   sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
>   sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
>   sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
>   .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>   .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>   .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>   .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>   .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>   .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>   .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>   .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
>   .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>   .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>   .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
>   .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
>   .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
>   .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
>   .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>   .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
>   sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>   .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>   .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/sys/mount.h           | 22 ++++++++++++++
>   sysdeps/unix/sysv/linux/syscalls.list         |  1 +
>   sysdeps/unix/sysv/linux/tst-mount.c           | 30 +++++++++++++++++--
>   .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
>   .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
>   38 files changed, 87 insertions(+), 6 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index de12657449..696de3962b 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -29,9 +29,9 @@ Major new features:
>     memory is carried out in the context of the caller, using the caller's
>     CPU affinity, and priority with CPU usage accounted to the caller.
>   
> -* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, and open_tree
> -  have been added.  It is a new mount API to allow more flexibility on mount
> -  operations, specially when used along namespaces.
> +* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, open_tree,
> +  and mount_setattr have been added.  It is a new mount API to allow more
> +  flexibility on mount operations, specially when used along namespaces.
>   
>   Deprecated and removed features, and other changes affecting compatibility:
>   
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index b70530ef40..65d2ceda2c 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -305,6 +305,7 @@ libc {
>       fsopen;
>       fspick;
>       move_mount;
> +    mount_setattr;
>       open_tree;
>       pidfd_open;
>       pidfd_getfd;
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 2a666d8135..16d34b55c6 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2620,6 +2620,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 41bd7c1959..3f794bea0f 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2717,6 +2717,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 198fdab2f7..072627810c 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2381,6 +2381,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 6fd4e75df2..dbd5f07e6e 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -500,6 +500,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 3ec572b50f..0f02d79faa 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -497,6 +497,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 94f3deb3e5..11d3b36a78 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2656,6 +2656,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index a7deaf3e26..5caa1321b1 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2605,6 +2605,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 5f1a1bc4d0..276d7d5619 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2789,6 +2789,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 1af8a55836..5e2249518e 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2555,6 +2555,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index ad3a4b4008..802469a5b9 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -501,6 +501,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 87e76f33a0..2f949397df 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2732,6 +2732,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 73df42c7aa..f63cc9cd4c 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2705,6 +2705,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 5c2e936547..88d2b707f9 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2702,6 +2702,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 45919d27d6..6c2bc0ee78 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2697,6 +2697,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 8321b0efac..09c9980d95 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2695,6 +2695,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index c7198646d2..763920ea8f 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2703,6 +2703,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 8b3cca2a54..36d30558c1 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2606,6 +2606,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 2f1595bb35..e4383fe464 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2744,6 +2744,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index d1d4e12d12..735a8eea7e 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2127,6 +2127,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 50c9fadaf0..715dd31afe 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2759,6 +2759,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 8998a560cd..ac4b69e5fc 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2792,6 +2792,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index bca46bdbe5..fd42f1bc11 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2514,6 +2514,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 97f6d96cd6..24688916dd 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2816,6 +2816,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index f588745b28..536eddf9f1 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2383,6 +2383,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 1acf8a4c54..214b4f1c87 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2583,6 +2583,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 7c8b410f1a..bd738a4eb8 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2757,6 +2757,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index ba9317ee01..170361236a 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2551,6 +2551,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 75fa8834f1..88fcd03300 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2612,6 +2612,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 4a4f8ff33f..f1115ef46d 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2609,6 +2609,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index d26671dba8..6063da1acf 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2752,6 +2752,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 16c2a98ab5..780d2c0987 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2578,6 +2578,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> index eb6705a091..4929d84027 100644
> --- a/sysdeps/unix/sysv/linux/sys/mount.h
> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> @@ -23,6 +23,8 @@
>   
>   #include <fcntl.h>
>   #include <features.h>
> +#include <stdint.h>
> +#include <stddef.h>
>   #include <sys/ioctl.h>
>   
>   #define BLOCK_SIZE	1024
> @@ -155,6 +157,17 @@ enum
>   #define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
>   
>   
> +/* For mount_setattr.  */
> +struct mount_attr
> +{
> +  uint64_t attr_set;
> +  uint64_t attr_clr;
> +  uint64_t propagation;
> +  uint64_t userns_fd;
> +};
> +
> +#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
> +
>   /* move_mount flags.  */
>   #define MOVE_MOUNT_F_SYMLINKS   0x00000001 /* Follow symlinks on from path */
>   #define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
> @@ -240,6 +253,15 @@ extern int fspick (int __dfd, const char *__path, unsigned int __flags)
>   extern int open_tree (int __dfd, const char *__filename, unsigned int __flags)
>     __THROW;
>   
> +/* Change the mount proprieties of the mount or an entire mount tree.  If


mount properties


> +   PATH is a relative pathname, then it is interpreted relative to the directory
> +   referred to by the file descriptor dirfd.  Otherwise if DFD is the special
> +   value AT_FDCWD then PATH is interpreted relative to the current working
> +   directory of the calling process.  */
> +extern int mount_setattr (int __dfd, const char *__path, unsigned int __flags,
> +			  struct mount_attr *__uattr, size_t __usize)
> +  __THROW;
> +
>   __END_DECLS
>   
>   #endif /* _SYS_MOUNT_H */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index e5e2b528fd..f79a519d89 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -39,6 +39,7 @@ mincore		-	mincore		i:aUV	mincore
>   mlock		-	mlock		i:bU	mlock
>   mlockall	-	mlockall	i:i	mlockall
>   mount		EXTRA	mount		i:sssUp	__mount	mount
> +mount_setattr	EXTRA	mount_setattr	i:isUpi	mount_setattr
>   move_mount	EXTRA	move_mount	i:isisU	move_mount
>   munlock		-	munlock		i:aU	munlock
>   munlockall	-	munlockall	i:	munlockall
> diff --git a/sysdeps/unix/sysv/linux/tst-mount.c b/sysdeps/unix/sysv/linux/tst-mount.c
> index 12a665f950..502d7e3433 100644
> --- a/sysdeps/unix/sysv/linux/tst-mount.c
> +++ b/sysdeps/unix/sysv/linux/tst-mount.c
> @@ -23,6 +23,9 @@
>   #include <sys/wait.h>
>   #include <sys/mount.h>
>   
> +_Static_assert (sizeof (struct mount_attr) == MOUNT_ATTR_SIZE_VER0,
> +		"sizeof (struct mount_attr) != MOUNT_ATTR_SIZE_VER0");
> +
>   static void
>   subprocess (void)
>   {
> @@ -67,10 +70,31 @@ subprocess (void)
>   
>     TEST_COMPARE (open_tree (AT_FDCWD, "", 0), -1);
>     TEST_COMPARE (errno, ENOENT);
> +  int fd_tree = open_tree (AT_FDCWD, "/tmp",
> +			   OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC);
> +  TEST_VERIFY (fd_tree != -1);
> +
>     {
> -    int fd_tree = open_tree (AT_FDCWD, "/tmp",
> -			     OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC);
> -    TEST_VERIFY (fd_tree != -1);
> +    struct mount_attr attr =
> +    {
> +      .attr_set = MOUNT_ATTR_RDONLY,
> +    };
> +     mount_setattr (fd_tree, "", AT_EMPTY_PATH, &attr,
> +			   sizeof (attr));
> +    int r = mount_setattr (fd_tree, "", AT_EMPTY_PATH, &attr,
> +			   sizeof (attr));
> +    /* New mount API was added on 5.1, but mount_setattr on 5.12.  */
> +    if (r == -1)
> +      TEST_COMPARE (errno, ENOSYS);
> +    else
> +      {
> +	TEST_COMPARE (mount_setattr (-1, "", AT_EMPTY_PATH, &attr,
> +				     sizeof (attr)), -1);
> +	TEST_COMPARE (errno, EBADF);
> +	TEST_COMPARE (mount_setattr (fd_tree, "", AT_EMPTY_PATH, &attr,
> +				     sizeof (attr) - 8), -1);
> +	TEST_COMPARE (errno, EINVAL);
> +      }
>     }
>   
>     _exit (0);
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index bd7c4ef801..56cad609fe 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2529,6 +2529,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 1c7f60b41a..2ed242a62d 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2635,6 +2635,7 @@ GLIBC_2.36 fsconfig F
>   GLIBC_2.36 fsmount F
>   GLIBC_2.36 fsopen F
>   GLIBC_2.36 fspick F
> +GLIBC_2.36 mount_setattr F
>   GLIBC_2.36 move_mount F
>   GLIBC_2.36 open_tree F
>   GLIBC_2.36 pidfd_getfd F



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

* Re: [PATCH v5 8/8] linux: Add mount_setattr
  2022-06-06 13:44 ` [PATCH v5 8/8] linux: Add mount_setattr Adhemerval Zanella
  2022-06-07 16:27   ` Yann Droneaud
@ 2022-06-07 16:34   ` Yann Droneaud
  2022-06-07 18:10     ` Christian Brauner
  1 sibling, 1 reply; 21+ messages in thread
From: Yann Droneaud @ 2022-06-07 16:34 UTC (permalink / raw)
  To: Adhemerval Zanella, Carlos O'Donell, Christian Brauner
  Cc: GNU C Library, linux-api

Hi,

Le 06/06/2022 à 15:44, Adhemerval Zanella via Libc-alpha a écrit :
> It was added on Linux 5.12 (2a1867219c7b27f928e2545782b86daaf9ad50bd)
> to allow change the properties of a mount or a mount tree using file
> descriptors which the new mount api is based on.
>
> Checked on x86_64-linux-gnu.
> ---
>   NEWS                                          |  6 ++--
>   sysdeps/unix/sysv/linux/Versions              |  1 +
>   sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
>   sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
>   sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
>   .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>   .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>   .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>   .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>   .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>   .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>   .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>   .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
>   sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
>   .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>   .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>   .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
>   .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
>   .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
>   .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
>   .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>   .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
>   sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>   sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>   .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>   .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
>   sysdeps/unix/sysv/linux/sys/mount.h           | 22 ++++++++++++++
>   sysdeps/unix/sysv/linux/syscalls.list         |  1 +
>   sysdeps/unix/sysv/linux/tst-mount.c           | 30 +++++++++++++++++--
>   .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
>   .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
>   38 files changed, 87 insertions(+), 6 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index de12657449..696de3962b 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -29,9 +29,9 @@ Major new features:
>     memory is carried out in the context of the caller, using the caller's
>     CPU affinity, and priority with CPU usage accounted to the caller.
>   
> -* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, and open_tree
> -  have been added.  It is a new mount API to allow more flexibility on mount
> -  operations, specially when used along namespaces.
> +* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, open_tree,
> +  and mount_setattr have been added.  It is a new mount API to allow more
> +  flexibility on mount operations, specially when used along namespaces.
>   
>   Deprecated and removed features, and other changes affecting compatibility:
>   
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index b70530ef40..65d2ceda2c 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -305,6 +305,7 @@ libc {
>       fsopen;
>       fspick;
>       move_mount;
> +    mount_setattr;
>       open_tree;
>       pidfd_open;
>       pidfd_getfd;

> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> index eb6705a091..4929d84027 100644
> --- a/sysdeps/unix/sysv/linux/sys/mount.h
> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> @@ -23,6 +23,8 @@
>   
>   #include <fcntl.h>
>   #include <features.h>
> +#include <stdint.h>
> +#include <stddef.h>
>   #include <sys/ioctl.h>
>   
>   #define BLOCK_SIZE	1024
> @@ -155,6 +157,17 @@ enum
>   #define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
>   
>   
> +/* For mount_setattr.  */
> +struct mount_attr
> +{
> +  uint64_t attr_set;
> +  uint64_t attr_clr;
> +  uint64_t propagation;
> +  uint64_t userns_fd;
> +};
> +
> +#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
> +
>   /* move_mount flags.  */
>   #define MOVE_MOUNT_F_SYMLINKS   0x00000001 /* Follow symlinks on from path */
>   #define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
> @@ -240,6 +253,15 @@ extern int fspick (int __dfd, const char *__path, unsigned int __flags)
>   extern int open_tree (int __dfd, const char *__filename, unsigned int __flags)
>     __THROW;
>   
> +/* Change the mount proprieties of the mount or an entire mount tree.  If
> +   PATH is a relative pathname, then it is interpreted relative to the directory
> +   referred to by the file descriptor dirfd.  Otherwise if DFD is the special
> +   value AT_FDCWD then PATH is interpreted relative to the current working
> +   directory of the calling process.  */
> +extern int mount_setattr (int __dfd, const char *__path, unsigned int __flags,
> +			  struct mount_attr *__uattr, size_t __usize)
> +  __THROW;
> +


I wonder why __uattr is not declared const struct mount_attr * ?

Is it really expected that future mount_setattr() extensions to write 
back into the userspace structure ?



>   __END_DECLS
>   
>   #endif /* _SYS_MOUNT_H */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index e5e2b528fd..f79a519d89 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -39,6 +39,7 @@ mincore		-	mincore		i:aUV	mincore
>   mlock		-	mlock		i:bU	mlock
>   mlockall	-	mlockall	i:i	mlockall
>   mount		EXTRA	mount		i:sssUp	__mount	mount
> +mount_setattr	EXTRA	mount_setattr	i:isUpi	mount_setattr
>   move_mount	EXTRA	move_mount	i:isisU	move_mount
>   munlock		-	munlock		i:aU	munlock
>   munlockall	-	munlockall	i:	munlockall


Regards

-- 

Yann Droneaud

OPTEYA



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

* Re: [PATCH v5 8/8] linux: Add mount_setattr
  2022-06-07 16:34   ` Yann Droneaud
@ 2022-06-07 18:10     ` Christian Brauner
  0 siblings, 0 replies; 21+ messages in thread
From: Christian Brauner @ 2022-06-07 18:10 UTC (permalink / raw)
  To: Yann Droneaud
  Cc: Adhemerval Zanella, Carlos O'Donell, linux-api, GNU C Library

On Tue, Jun 07, 2022 at 06:34:46PM +0200, Yann Droneaud wrote:
> Hi,
> 
> Le 06/06/2022 à 15:44, Adhemerval Zanella via Libc-alpha a écrit :
> > It was added on Linux 5.12 (2a1867219c7b27f928e2545782b86daaf9ad50bd)
> > to allow change the properties of a mount or a mount tree using file
> > descriptors which the new mount api is based on.
> > 
> > Checked on x86_64-linux-gnu.
> > ---
> >   NEWS                                          |  6 ++--
> >   sysdeps/unix/sysv/linux/Versions              |  1 +
> >   sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
> >   sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
> >   sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
> >   sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
> >   sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
> >   sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
> >   sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
> >   sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
> >   sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
> >   .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
> >   .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
> >   .../sysv/linux/microblaze/be/libc.abilist     |  1 +
> >   .../sysv/linux/microblaze/le/libc.abilist     |  1 +
> >   .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
> >   .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
> >   .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
> >   .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
> >   sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
> >   sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
> >   .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
> >   .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
> >   .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
> >   .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
> >   .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
> >   .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
> >   .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
> >   .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
> >   sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
> >   sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
> >   .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
> >   .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
> >   sysdeps/unix/sysv/linux/sys/mount.h           | 22 ++++++++++++++
> >   sysdeps/unix/sysv/linux/syscalls.list         |  1 +
> >   sysdeps/unix/sysv/linux/tst-mount.c           | 30 +++++++++++++++++--
> >   .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
> >   .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
> >   38 files changed, 87 insertions(+), 6 deletions(-)
> > 
> > diff --git a/NEWS b/NEWS
> > index de12657449..696de3962b 100644
> > --- a/NEWS
> > +++ b/NEWS
> > @@ -29,9 +29,9 @@ Major new features:
> >     memory is carried out in the context of the caller, using the caller's
> >     CPU affinity, and priority with CPU usage accounted to the caller.
> > -* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, and open_tree
> > -  have been added.  It is a new mount API to allow more flexibility on mount
> > -  operations, specially when used along namespaces.
> > +* On Linux, the fsopen, fsmount, move_mount, fsconfig, fspick, open_tree,
> > +  and mount_setattr have been added.  It is a new mount API to allow more
> > +  flexibility on mount operations, specially when used along namespaces.
> >   Deprecated and removed features, and other changes affecting compatibility:
> > diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> > index b70530ef40..65d2ceda2c 100644
> > --- a/sysdeps/unix/sysv/linux/Versions
> > +++ b/sysdeps/unix/sysv/linux/Versions
> > @@ -305,6 +305,7 @@ libc {
> >       fsopen;
> >       fspick;
> >       move_mount;
> > +    mount_setattr;
> >       open_tree;
> >       pidfd_open;
> >       pidfd_getfd;
> 
> > diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> > index eb6705a091..4929d84027 100644
> > --- a/sysdeps/unix/sysv/linux/sys/mount.h
> > +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> > @@ -23,6 +23,8 @@
> >   #include <fcntl.h>
> >   #include <features.h>
> > +#include <stdint.h>
> > +#include <stddef.h>
> >   #include <sys/ioctl.h>
> >   #define BLOCK_SIZE	1024
> > @@ -155,6 +157,17 @@ enum
> >   #define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */
> > +/* For mount_setattr.  */
> > +struct mount_attr
> > +{
> > +  uint64_t attr_set;
> > +  uint64_t attr_clr;
> > +  uint64_t propagation;
> > +  uint64_t userns_fd;
> > +};
> > +
> > +#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
> > +
> >   /* move_mount flags.  */
> >   #define MOVE_MOUNT_F_SYMLINKS   0x00000001 /* Follow symlinks on from path */
> >   #define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
> > @@ -240,6 +253,15 @@ extern int fspick (int __dfd, const char *__path, unsigned int __flags)
> >   extern int open_tree (int __dfd, const char *__filename, unsigned int __flags)
> >     __THROW;
> > +/* Change the mount proprieties of the mount or an entire mount tree.  If
> > +   PATH is a relative pathname, then it is interpreted relative to the directory
> > +   referred to by the file descriptor dirfd.  Otherwise if DFD is the special
> > +   value AT_FDCWD then PATH is interpreted relative to the current working
> > +   directory of the calling process.  */
> > +extern int mount_setattr (int __dfd, const char *__path, unsigned int __flags,
> > +			  struct mount_attr *__uattr, size_t __usize)
> > +  __THROW;
> > +
> 
> 
> I wonder why __uattr is not declared const struct mount_attr * ?
> 
> Is it really expected that future mount_setattr() extensions to write back
> into the userspace structure ?

I don't think we can in principle rule this out. A const is a bit of a
scary commitment in this regard... I need to think about this a bit.

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

* Re: [PATCH v5 2/8] linux: Add fsmount
  2022-06-07 16:14   ` Yann Droneaud
@ 2022-06-10 17:16     ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-10 17:16 UTC (permalink / raw)
  To: Yann Droneaud, libc-alpha, Carlos O'Donell



On 07/06/2022 13:14, Yann Droneaud wrote:

>> diff --git a/NEWS b/NEWS
>> index a94e8c0124..51ca68f1da 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -29,8 +29,8 @@ Major new features:
>>     memory is carried out in the context of the caller, using the caller's
>>     CPU affinity, and priority with CPU usage accounted to the caller.
>>   -* On Linux, the fsopen has been added.  It is a new mount API to allow
>> -  more flexibility on mount operations, specially when used along
>> +* On Linux, the fsopen and fsmound have been added.  It is a new mount API
> 
> fsopen and fsmount
> 

Fixed, thanks.

>>     __BEGIN_DECLS
>>   @@ -155,6 +171,11 @@ extern int umount2 (const char *__special_file, int __flags) __THROW;
>>      mouting.  */
>>   extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
>>   +/* Create a mount representation for the FD created by fsopen using
>> +   FLAGS with ATTR_FLAGS describing who the mount is to be performed.  */
> 
> 
> describing how the mount
> 

Ack.

> 
>> +extern int fsmount (int __fd, unsigned int __flags,
>> +            unsigned int __ms_flags) __THROW;
>> +
>>   __END_DECLS
>>     #endif /* _SYS_MOUNT_H */
>> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
>> index a2919f433d..4ac6fe7659 100644
>> --- a/sysdeps/unix/sysv/linux/syscalls.list
>> +++ b/sysdeps/unix/sysv/linux/syscalls.list
>> @@ -12,6 +12,7 @@ epoll_ctl    EXTRA    epoll_ctl    i:iiip    epoll_ctl
>>   eventfd        EXTRA    eventfd2    i:ii    eventfd
>>   execve        -    execve        i:spp    __execve    execve
>>   flock        -    flock        i:ii    __flock        flock
>> +fsmount        EXTRA    fsmount        i:iUU    fsmount
>>   fsopen        EXTRA    fsopen        i:sU    fsopen
>>   get_kernel_syms    EXTRA    get_kernel_syms    i:p    __compat_get_kernel_syms    get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>>   getpid          -       getpid          Ei:     __getpid        getpid
>> diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> index 162b01147d..4d4a234f3a 100755
>> --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> @@ -46,7 +46,11 @@ def main():
>>                   linux_version_glibc > linux_version_headers,
>>                   linux_version_headers > linux_version_glibc)
>>   -    status = check('FSOPEN_.*')
>> +    status = max(
>> +        check('FSOPEN_.*'),
>> +        check('FSMOUNT_.*'),
>> +        # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
>> +        check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'))
> 
> 
> should the mount_setattr stuf be added in the related patch instead ?

Indeed, I will move to the mount_setattr patch.

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

* Re: [PATCH v5 5/8] linux: Add fspick
  2022-06-07 16:19   ` Yann Droneaud
@ 2022-06-10 17:19     ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-10 17:19 UTC (permalink / raw)
  To: Yann Droneaud, libc-alpha, Carlos O'Donell



On 07/06/2022 13:19, Yann Droneaud wrote:

>>   /* The type of fsconfig call made.   */
>>   enum fsconfig_command
>>   {
>> @@ -219,6 +227,10 @@ extern int move_mount (int __from_dfd, const char *__from_pathname,
>>   extern int fsconfig (int __fd, unsigned int __cmd, const char *__key,
>>                const char *__value, int __aux) __THROW;
>>   +/* Equivalent of fopen for for an existing mount point.  */
> 
> 
> Equivalent of fsopen for an existing mount point

Ack, fixed.



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

* Re: [PATCH v5 8/8] linux: Add mount_setattr
  2022-06-07 16:27   ` Yann Droneaud
@ 2022-06-10 17:21     ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-10 17:21 UTC (permalink / raw)
  To: Yann Droneaud, libc-alpha, Carlos O'Donell



On 07/06/2022 13:27, Yann Droneaud wrote:

>> +#define MOUNT_ATTR_SIZE_VER0    32 /* sizeof first published struct */
>> +
>>   /* move_mount flags.  */
>>   #define MOVE_MOUNT_F_SYMLINKS   0x00000001 /* Follow symlinks on from path */
>>   #define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
>> @@ -240,6 +253,15 @@ extern int fspick (int __dfd, const char *__path, unsigned int __flags)
>>   extern int open_tree (int __dfd, const char *__filename, unsigned int __flags)
>>     __THROW;
>>   +/* Change the mount proprieties of the mount or an entire mount tree.  If
> 
> 
> mount properties
> 

Ack.

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

* Re: [PATCH v5 1/8] linux: Add fsopen
  2022-06-06 13:44 ` [PATCH v5 1/8] linux: Add fsopen Adhemerval Zanella
@ 2022-06-17 21:28   ` Carlos O'Donell
  2022-06-22 12:30     ` Adhemerval Zanella
  0 siblings, 1 reply; 21+ messages in thread
From: Carlos O'Donell @ 2022-06-17 21:28 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha

On 6/6/22 09:44, Adhemerval Zanella wrote:
> It was added on Linux 5.2 (24dcb3d90a1f67fe08c68a004af37df059d74005)
> to start the process of preparing to create a superblock that will
> then be mountable, using an fd as a context handle.

Looking forward to v6. See comments below.

> ---
>  NEWS                                          |  4 ++
>  sysdeps/unix/sysv/linux/Makefile              |  8 +++
>  sysdeps/unix/sysv/linux/Versions              |  1 +
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>  .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>  .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/sys/mount.h           |  8 +++
>  sysdeps/unix/sysv/linux/syscalls.list         |  1 +
>  sysdeps/unix/sysv/linux/tst-mount-consts.py   | 53 +++++++++++++++++++
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
>  39 files changed, 108 insertions(+)
>  create mode 100755 sysdeps/unix/sysv/linux/tst-mount-consts.py
> 
> diff --git a/NEWS b/NEWS
> index 6a213775e6..a94e8c0124 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -29,6 +29,10 @@ Major new features:
>    memory is carried out in the context of the caller, using the caller's
>    CPU affinity, and priority with CPU usage accounted to the caller.
>  
> +* On Linux, the fsopen has been added.  It is a new mount API to allow
> +  more flexibility on mount operations, specially when used along
> +  namespaces.

Suggest:

* On Linux, the fsopen function has been added.  It is part of the new Linux kernel
  mount APIs that allow applications to more flexibly configure and operate on
  filesystem mounts.  The new mount APIs are specifically designed to work with
  namespaces.

> +
>  Deprecated and removed features, and other changes affecting compatibility:
>  
>  * Support for prelink will be removed in the next release; this includes
> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> index 9e691fa103..7ffcf7ed83 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -256,6 +256,14 @@ $(objpfx)tst-pidfd-consts.out: ../sysdeps/unix/sysv/linux/tst-pidfd-consts.py
>  	  < /dev/null > $@ 2>&1; $(evaluate-test)
>  $(objpfx)tst-pidfd-consts.out: $(sysdeps-linux-python-deps)
>  
> +tests-special += $(objpfx)tst-mount-consts.out
> +$(objpfx)tst-mount-consts.out: ../sysdeps/unix/sysv/linux/tst-mount-consts.py
> +	$(sysdeps-linux-python) \
> +	  ../sysdeps/unix/sysv/linux/tst-mount-consts.py \
> +	    $(sysdeps-linux-python-cc) \
> +	  < /dev/null > $@ 2>&1; $(evaluate-test)
> +$(objpfx)tst-mount-consts.out: $(sysdeps-linux-python-deps)

OK.

> +
>  tst-rseq-disable-ENV = GLIBC_TUNABLES=glibc.pthread.rseq=0
>  
>  endif # $(subdir) == misc
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 66a995d3dc..9ff750ac09 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -300,6 +300,7 @@ libc {
>      epoll_pwait2;
>    }
>    GLIBC_2.36 {
> +    fsopen;

OK.

>      pidfd_open;
>      pidfd_getfd;
>      pidfd_send_signal;
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 027a1cf531..dedb69abda 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 703fcf5deb..67c7c43190 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 28c52dcbac..6b478b9461 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index c3adade814..45af999b89 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 33a90a248e..5abdfbd677 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 23a00cfc0b..1b560da21f 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 93e1068208..09397be929 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 356b05cae4..a3b95efa36 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 58e51aae4b..840aa669e5 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index ea4a19cbc2..8901429800 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 217717859c..5d3ccb254f 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 0e373d5c89..651d7e65f8 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 569d3e5556..c507fbd83b 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 7ccc7f93eb..eef92ef698 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index d197f0bd5d..92634e2910 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 4a8e857e53..5a6a1b8bcd 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index e0a170c030..0fdf5ff93b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index 6f809245c9..e219863360 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index 1fc9e27c27..8fef5e2ab8 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
>  GLIBC_2.35 write F
>  GLIBC_2.35 writev F
>  GLIBC_2.35 wscanf F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 01ba1dd9ec..d8a5c77db1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 263231a396..18cb35378d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 2c3c3af8fb..e144bb4167 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 4138874b38..1f283236cd 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 5feae3245f..f76f47d017 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 3e6a4ae5ec..93517ae3d6 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 93c7b79b51..4d2c9ed035 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index b663fabeba..71bb7af685 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index abebf77944..a040860010 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index afd8a42895..10b7fa3560 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 56feda817d..e859089b64 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 00cc5b24d1..4347e399d6 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> index 174b5c7763..56da283d3f 100644
> --- a/sysdeps/unix/sysv/linux/sys/mount.h
> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> @@ -134,6 +134,10 @@ enum
>  };
>  
>  
> +/* fsopen flags.  */
> +#define FSOPEN_CLOEXEC          0x00000001

OK. Expecting FSOPEN_CLOEXEC and it is present. The flag does what we expect because something
has to close the fd that is attached to the mount context. Verified FSOPEN_CLOEXEC is the only
flag bit we current have for fsopen(). Value matches kernel.

> +
> +
>  __BEGIN_DECLS
>  
>  /* Mount a filesystem.  */
> @@ -147,6 +151,10 @@ extern int umount (const char *__special_file) __THROW;
>  /* Unmount a filesystem.  Force unmounting if FLAGS is set to MNT_FORCE.  */
>  extern int umount2 (const char *__special_file, int __flags) __THROW;
>  
> +/* Open the filesystem referenced by FS_NAME so it can be configured for
> +   mouting.  */
> +extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;

OK const char *, and unsigned int, agrees with the kernel, and SYSCALL_DEFINE2 macro.

> +
>  __END_DECLS
>  
>  #endif /* _SYS_MOUNT_H */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index b12a0d56fa..a2919f433d 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
>  eventfd		EXTRA	eventfd2	i:ii	eventfd
>  execve		-	execve		i:spp	__execve	execve
>  flock		-	flock		i:ii	__flock		flock
> +fsopen		EXTRA	fsopen		i:sU	fsopen

OK. Add wrapper. Returns int. Takes non-NULL string e.g. first arg to open. Unsigned long int [OK].

>  get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>  getpid          -       getpid          Ei:     __getpid        getpid
>  getegid		-	getegid		Ei:	__getegid	getegid
> diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
> new file mode 100755
> index 0000000000..162b01147d
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
> @@ -0,0 +1,53 @@
> +#!/usr/bin/python3
> +# Test that glibc's sys/mount.h constants match the kernel's.
> +# Copyright (C) 2022 Free Software Foundation, Inc.
> +# This file is part of the GNU C Library.
> +#
> +# The GNU C Library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU Lesser General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +#
> +# The GNU C Library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +# Lesser General Public License for more details.
> +#
> +# You should have received a copy of the GNU Lesser General Public
> +# License along with the GNU C Library; if not, see
> +# <https://www.gnu.org/licenses/>.
> +
> +import argparse
> +import sys
> +
> +import glibcextract
> +import glibcsyscalls
> +
> +
> +def main():
> +    """The main entry point."""
> +    parser = argparse.ArgumentParser(
> +        description="Test that glibc's sys/mount.h constants "
> +        "match the kernel's.")
> +    parser.add_argument('--cc', metavar='CC',
> +                        help='C compiler (including options) to use')
> +    args = parser.parse_args()
> +
> +    linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)

I think this needs a comment:

        # Constants in glibc were updated to match Linux v5.16
        # When glibc constants are updated this value should be updated to
        # match the released kernel version from which the constants were taken.

> +    linux_version_glibc = (5, 16)

Then this allows you to drive the allow_extra_[12] boiler-plate checking below.

> +    def check(cte, exclude=None):
> +        return glibcextract.compare_macro_consts(
> +                '#include <sys/mount.h>\n',
> +                '#include <asm/fcntl.h>\n'
> +                '#include <linux/mount.h>\n',
> +                args.cc,
> +                cte,
> +                exclude,
> +                linux_version_glibc > linux_version_headers,
> +                linux_version_headers > linux_version_glibc)
> +
> +    status = check('FSOPEN_.*')
> +    sys.exit(status)
> +
> +if __name__ == '__main__':
> +    main()
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 4e729bdf56..65e5d2150d 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index b5d7b9f1ed..4c6371b3c4 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
>  GLIBC_2.36 pidfd_send_signal F


-- 
Cheers,
Carlos.


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

* Re: [PATCH v5 2/8] linux: Add fsmount
  2022-06-06 13:44 ` [PATCH v5 2/8] linux: Add fsmount Adhemerval Zanella
  2022-06-07 16:14   ` Yann Droneaud
@ 2022-06-18  6:15   ` Carlos O'Donell
  2022-06-22 12:41     ` Adhemerval Zanella
  1 sibling, 1 reply; 21+ messages in thread
From: Carlos O'Donell @ 2022-06-18  6:15 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha

On 6/6/22 09:44, Adhemerval Zanella wrote:
> It was added on 5.2 (93766fbd2696c2c4453dd8e1070977e9cd4e6b6d) to
> provide a way by which a filesystem opened with fsopen and configured
> by a series of fsconfig calls can have a detached mount object
> created for it.

Suggest v6 with updated NEWS. Everything else looks good and matches the kernel.

Tested-by: Carlos O'Donell <carlos@redhat.com>

> ---
>  NEWS                                          |  4 ++--
>  sysdeps/unix/sysv/linux/Versions              |  1 +
>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  1 +
>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  1 +
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/ia64/libc.abilist     |  1 +
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>  .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>  .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/or1k/libc.abilist     |  1 +
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>  .../linux/powerpc/powerpc64/be/libc.abilist   |  1 +
>  .../linux/powerpc/powerpc64/le/libc.abilist   |  1 +
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 +
>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  1 +
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  1 +
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>  .../sysv/linux/sparc/sparc64/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/sys/mount.h           | 21 +++++++++++++++++++
>  sysdeps/unix/sysv/linux/syscalls.list         |  1 +
>  sysdeps/unix/sysv/linux/tst-mount-consts.py   |  6 +++++-
>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  1 +
>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  1 +
>  38 files changed, 63 insertions(+), 3 deletions(-)
> 
> diff --git a/NEWS b/NEWS
> index a94e8c0124..51ca68f1da 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -29,8 +29,8 @@ Major new features:
>    memory is carried out in the context of the caller, using the caller's
>    CPU affinity, and priority with CPU usage accounted to the caller.
>  
> -* On Linux, the fsopen has been added.  It is a new mount API to allow
> -  more flexibility on mount operations, specially when used along
> +* On Linux, the fsopen and fsmound have been added.  It is a new mount API
> +  to allow more flexibility on mount operations, specially when used along
>    namespaces.

Suggest:

* On Linux, the fsopen and fsmount functions have been added.  They are part of
  the new Linux kernel mount APIs that allow applications to more flexibly
  configure and operate on filesystem mounts.  The new mount APIs are specifically
  designed to work with namespaces.

>  
>  Deprecated and removed features, and other changes affecting compatibility:
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 9ff750ac09..1d5b15aec4 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -300,6 +300,7 @@ libc {
>      epoll_pwait2;
>    }
>    GLIBC_2.36 {
> +    fsmount;

OK.

>      fsopen;
>      pidfd_open;
>      pidfd_getfd;
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index dedb69abda..bcad128067 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index 67c7c43190..1d88271a25 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 6b478b9461..c4cc3c17f0 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 45af999b89..cfec9daf7a 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 5abdfbd677..b77416d32f 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 1b560da21f..76261943fb 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 09397be929..29352b69ac 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index a3b95efa36..9c465ec784 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 840aa669e5..ad1268e61f 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 8901429800..c63c140612 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 5d3ccb254f..937ac25d40 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 651d7e65f8..d144df6ace 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index c507fbd83b..87ff6f261f 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index eef92ef698..b0d2b88f14 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 92634e2910..2ed23ce297 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 5a6a1b8bcd..0048a23416 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 0fdf5ff93b..4b10b6bec2 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index e219863360..8f905a8def 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index 8fef5e2ab8..60c2cdb6e2 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
>  GLIBC_2.35 write F
>  GLIBC_2.35 writev F
>  GLIBC_2.35 wscanf F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index d8a5c77db1..ac5453d9c1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 18cb35378d..772b6d2587 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index e144bb4167..bcf1ed9a1c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 1f283236cd..cf4452775f 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index f76f47d017..48aaada19d 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 93517ae3d6..e08ddc8627 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 4d2c9ed035..c315714ed8 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 71bb7af685..9d83b3cf7d 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index a040860010..8e10946936 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 10b7fa3560..6b4d8047c9 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index e859089b64..d222061590 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 4347e399d6..a8eb190e46 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
> index 56da283d3f..9fa39c7d09 100644
> --- a/sysdeps/unix/sysv/linux/sys/mount.h
> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
> @@ -137,6 +137,22 @@ enum
>  /* fsopen flags.  */
>  #define FSOPEN_CLOEXEC          0x00000001
>  
> +/* fsmount flags.  */
> +#define FSMOUNT_CLOEXEC         0x00000001

OK. Correct value.

> +
> +/* mount attributes used on fsmount.  */
> +#define MOUNT_ATTR_RDONLY       0x00000001 /* Mount read-only.  */
> +#define MOUNT_ATTR_NOSUID       0x00000002 /* Ignore suid and sgid bits.  */
> +#define MOUNT_ATTR_NODEV        0x00000004 /* Disallow access to device special files.  */
> +#define MOUNT_ATTR_NOEXEC       0x00000008 /* Disallow program execution.  */
> +#define MOUNT_ATTR__ATIME       0x00000070 /* Setting on how atime should be updated.  */
> +#define MOUNT_ATTR_RELATIME     0x00000000 /* - Update atime relative to mtime/ctime.  */
> +#define MOUNT_ATTR_NOATIME      0x00000010 /* - Do not update access times.  */
> +#define MOUNT_ATTR_STRICTATIME  0x00000020 /* - Always perform atime updates  */
> +#define MOUNT_ATTR_NODIRATIME   0x00000080 /* Do not update directory access times.  */

OK. These were added in v5.2. Values verified.

> +#define MOUNT_ATTR_IDMAP        0x00100000 /* Idmap mount to @userns_fd in struct mount_attr.  */
> +#define MOUNT_ATTR_NOSYMFOLLOW  0x00200000 /* Do not follow symlinks.  */

OK. These were added later. Values verified.

> +
>  
>  __BEGIN_DECLS
>  
> @@ -155,6 +171,11 @@ extern int umount2 (const char *__special_file, int __flags) __THROW;
>     mouting.  */
>  extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
>  
> +/* Create a mount representation for the FD created by fsopen using
> +   FLAGS with ATTR_FLAGS describing who the mount is to be performed.  */
> +extern int fsmount (int __fd, unsigned int __flags,
> +		    unsigned int __ms_flags) __THROW;

OK. Returns int. Takes int, unsigned int, unsigned int [OK].

> +
>  __END_DECLS
>  
>  #endif /* _SYS_MOUNT_H */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index a2919f433d..4ac6fe7659 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
>  eventfd		EXTRA	eventfd2	i:ii	eventfd
>  execve		-	execve		i:spp	__execve	execve
>  flock		-	flock		i:ii	__flock		flock
> +fsmount		EXTRA	fsmount		i:iUU	fsmount

OK. i:iUU.

>  fsopen		EXTRA	fsopen		i:sU	fsopen
>  get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>  getpid          -       getpid          Ei:     __getpid        getpid
> diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
> index 162b01147d..4d4a234f3a 100755
> --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
> +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
> @@ -46,7 +46,11 @@ def main():
>                  linux_version_glibc > linux_version_headers,
>                  linux_version_headers > linux_version_glibc)
>  
> -    status = check('FSOPEN_.*')
> +    status = max(
> +        check('FSOPEN_.*'),
> +        check('FSMOUNT_.*'),
> +        # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
> +        check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'))

OK.

>      sys.exit(status)
>  
>  if __name__ == '__main__':
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 65e5d2150d..0293b05d12 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 4c6371b3c4..be216f4686 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
>  GLIBC_2.35 _dl_find_object F
>  GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
> +GLIBC_2.36 fsmount F
>  GLIBC_2.36 fsopen F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F


-- 
Cheers,
Carlos.


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

* Re: [PATCH v5 1/8] linux: Add fsopen
  2022-06-17 21:28   ` Carlos O'Donell
@ 2022-06-22 12:30     ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-22 12:30 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: libc-alpha



> On 17 Jun 2022, at 18:28, Carlos O'Donell <carlos@redhat.com> wrote:
> 
> On 6/6/22 09:44, Adhemerval Zanella wrote:
>> It was added on Linux 5.2 (24dcb3d90a1f67fe08c68a004af37df059d74005)
>> to start the process of preparing to create a superblock that will
>> then be mountable, using an fd as a context handle.
> 
> Looking forward to v6. See comments below.
> 
>> ---
>> NEWS | 4 ++
>> sysdeps/unix/sysv/linux/Makefile | 8 +++
>> sysdeps/unix/sysv/linux/Versions | 1 +
>> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/alpha/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/arc/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/csky/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/i386/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/ia64/libc.abilist | 1 +
>> .../sysv/linux/m68k/coldfire/libc.abilist | 1 +
>> .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
>> .../sysv/linux/microblaze/be/libc.abilist | 1 +
>> .../sysv/linux/microblaze/le/libc.abilist | 1 +
>> .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
>> .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
>> .../sysv/linux/mips/mips64/n32/libc.abilist | 1 +
>> .../sysv/linux/mips/mips64/n64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/or1k/libc.abilist | 1 +
>> .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
>> .../powerpc/powerpc32/nofpu/libc.abilist | 1 +
>> .../linux/powerpc/powerpc64/be/libc.abilist | 1 +
>> .../linux/powerpc/powerpc64/le/libc.abilist | 1 +
>> .../unix/sysv/linux/riscv/rv32/libc.abilist | 1 +
>> .../unix/sysv/linux/riscv/rv64/libc.abilist | 1 +
>> .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
>> .../unix/sysv/linux/s390/s390-64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 +
>> .../sysv/linux/sparc/sparc32/libc.abilist | 1 +
>> .../sysv/linux/sparc/sparc64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/sys/mount.h | 8 +++
>> sysdeps/unix/sysv/linux/syscalls.list | 1 +
>> sysdeps/unix/sysv/linux/tst-mount-consts.py | 53 +++++++++++++++++++
>> .../unix/sysv/linux/x86_64/64/libc.abilist | 1 +
>> .../unix/sysv/linux/x86_64/x32/libc.abilist | 1 +
>> 39 files changed, 108 insertions(+)
>> create mode 100755 sysdeps/unix/sysv/linux/tst-mount-consts.py
>> 
>> diff --git a/NEWS b/NEWS
>> index 6a213775e6..a94e8c0124 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -29,6 +29,10 @@ Major new features:
>> memory is carried out in the context of the caller, using the caller's
>> CPU affinity, and priority with CPU usage accounted to the caller.
>> 
>> +* On Linux, the fsopen has been added. It is a new mount API to allow
>> + more flexibility on mount operations, specially when used along
>> + namespaces.
> 
> Suggest:
> 
> * On Linux, the fsopen function has been added. It is part of the new Linux kernel
> mount APIs that allow applications to more flexibly configure and operate on
> filesystem mounts. The new mount APIs are specifically designed to work with
> namespaces.

Ack.

> 
>> +
>> Deprecated and removed features, and other changes affecting compatibility:
>> 
>> * Support for prelink will be removed in the next release; this includes
>> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
>> index 9e691fa103..7ffcf7ed83 100644
>> --- a/sysdeps/unix/sysv/linux/Makefile
>> +++ b/sysdeps/unix/sysv/linux/Makefile
>> @@ -256,6 +256,14 @@ $(objpfx)tst-pidfd-consts.out: ../sysdeps/unix/sysv/linux/tst-pidfd-consts.py
>> 	 < /dev/null > $@ 2>&1; $(evaluate-test)
>> $(objpfx)tst-pidfd-consts.out: $(sysdeps-linux-python-deps)
>> 
>> +tests-special += $(objpfx)tst-mount-consts.out
>> +$(objpfx)tst-mount-consts.out: ../sysdeps/unix/sysv/linux/tst-mount-consts.py
>> +	$(sysdeps-linux-python) \
>> +	 ../sysdeps/unix/sysv/linux/tst-mount-consts.py \
>> +	 $(sysdeps-linux-python-cc) \
>> +	 < /dev/null > $@ 2>&1; $(evaluate-test)
>> +$(objpfx)tst-mount-consts.out: $(sysdeps-linux-python-deps)
> 
> OK.
> 
>> +
>> tst-rseq-disable-ENV = GLIBC_TUNABLES=glibc.pthread.rseq=0
>> 
>> endif # $(subdir) == misc
>> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
>> index 66a995d3dc..9ff750ac09 100644
>> --- a/sysdeps/unix/sysv/linux/Versions
>> +++ b/sysdeps/unix/sysv/linux/Versions
>> @@ -300,6 +300,7 @@ libc {
>> epoll_pwait2;
>> }
>> GLIBC_2.36 {
>> + fsopen;
> 
> OK.
> 
>> pidfd_open;
>> pidfd_getfd;
>> pidfd_send_signal;
>> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> index 027a1cf531..dedb69abda 100644
>> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> @@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> index 703fcf5deb..67c7c43190 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> @@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
>> index 28c52dcbac..6b478b9461 100644
>> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
>> @@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
>> index c3adade814..45af999b89 100644
>> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
>> @@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
>> index 33a90a248e..5abdfbd677 100644
>> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
>> @@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
>> index 23a00cfc0b..1b560da21f 100644
>> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
>> @@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> index 93e1068208..09397be929 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> @@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
>> index 356b05cae4..a3b95efa36 100644
>> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
>> @@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> index 58e51aae4b..840aa669e5 100644
>> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> @@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> index ea4a19cbc2..8901429800 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> @@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> index 217717859c..5d3ccb254f 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> @@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
>> index 0e373d5c89..651d7e65f8 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
>> @@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
>> index 569d3e5556..c507fbd83b 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
>> @@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> index 7ccc7f93eb..eef92ef698 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> @@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> index d197f0bd5d..92634e2910 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> @@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> index 4a8e857e53..5a6a1b8bcd 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> @@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> index e0a170c030..0fdf5ff93b 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> @@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> index 6f809245c9..e219863360 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> @@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
>> index 1fc9e27c27..8fef5e2ab8 100644
>> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
>> @@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
>> GLIBC_2.35 write F
>> GLIBC_2.35 writev F
>> GLIBC_2.35 wscanf F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> index 01ba1dd9ec..d8a5c77db1 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> @@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> index 263231a396..18cb35378d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> @@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
>> index 2c3c3af8fb..e144bb4167 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
>> @@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
>> index 4138874b38..1f283236cd 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
>> @@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
>> index 5feae3245f..f76f47d017 100644
>> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
>> @@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> index 3e6a4ae5ec..93517ae3d6 100644
>> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> @@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> index 93c7b79b51..4d2c9ed035 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> @@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> index b663fabeba..71bb7af685 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> @@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
>> index abebf77944..a040860010 100644
>> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
>> @@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
>> index afd8a42895..10b7fa3560 100644
>> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
>> @@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> index 56feda817d..e859089b64 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> @@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> index 00cc5b24d1..4347e399d6 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> @@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
>> index 174b5c7763..56da283d3f 100644
>> --- a/sysdeps/unix/sysv/linux/sys/mount.h
>> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
>> @@ -134,6 +134,10 @@ enum
>> };
>> 
>> 
>> +/* fsopen flags. */
>> +#define FSOPEN_CLOEXEC 0x00000001
> 
> OK. Expecting FSOPEN_CLOEXEC and it is present. The flag does what we expect because something
> has to close the fd that is attached to the mount context. Verified FSOPEN_CLOEXEC is the only
> flag bit we current have for fsopen(). Value matches kernel.
> 
>> +
>> +
>> __BEGIN_DECLS
>> 
>> /* Mount a filesystem. */
>> @@ -147,6 +151,10 @@ extern int umount (const char *__special_file) __THROW;
>> /* Unmount a filesystem. Force unmounting if FLAGS is set to MNT_FORCE. */
>> extern int umount2 (const char *__special_file, int __flags) __THROW;
>> 
>> +/* Open the filesystem referenced by FS_NAME so it can be configured for
>> + mouting. */
>> +extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
> 
> OK const char *, and unsigned int, agrees with the kernel, and SYSCALL_DEFINE2 macro.
> 
>> +
>> __END_DECLS
>> 
>> #endif /* _SYS_MOUNT_H */
>> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
>> index b12a0d56fa..a2919f433d 100644
>> --- a/sysdeps/unix/sysv/linux/syscalls.list
>> +++ b/sysdeps/unix/sysv/linux/syscalls.list
>> @@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
>> eventfd		EXTRA	eventfd2	i:ii	eventfd
>> execve		-	execve		i:spp	__execve	execve
>> flock		-	flock		i:ii	__flock		flock
>> +fsopen		EXTRA	fsopen		i:sU	fsopen
> 
> OK. Add wrapper. Returns int. Takes non-NULL string e.g. first arg to open. Unsigned long int [OK].
> 
>> get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>> getpid - getpid Ei: __getpid getpid
>> getegid		-	getegid		Ei:	__getegid	getegid
>> diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> new file mode 100755
>> index 0000000000..162b01147d
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> @@ -0,0 +1,53 @@
>> +#!/usr/bin/python3
>> +# Test that glibc's sys/mount.h constants match the kernel's.
>> +# Copyright (C) 2022 Free Software Foundation, Inc.
>> +# This file is part of the GNU C Library.
>> +#
>> +# The GNU C Library is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU Lesser General Public
>> +# License as published by the Free Software Foundation; either
>> +# version 2.1 of the License, or (at your option) any later version.
>> +#
>> +# The GNU C Library is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> +# Lesser General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU Lesser General Public
>> +# License along with the GNU C Library; if not, see
>> +# <https://www.gnu.org/licenses/>.
>> +
>> +import argparse
>> +import sys
>> +
>> +import glibcextract
>> +import glibcsyscalls
>> +
>> +
>> +def main():
>> + """The main entry point."""
>> + parser = argparse.ArgumentParser(
>> + description="Test that glibc's sys/mount.h constants "
>> + "match the kernel's.")
>> + parser.add_argument('--cc', metavar='CC',
>> + help='C compiler (including options) to use')
>> + args = parser.parse_args()
>> +
>> + linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)
> 
> I think this needs a comment:
> 
> # Constants in glibc were updated to match Linux v5.16
> # When glibc constants are updated this value should be updated to
> # match the released kernel version from which the constants were taken.

Ack.

> 
>> + linux_version_glibc = (5, 16)
> 
> Then this allows you to drive the allow_extra_[12] boiler-plate checking below.
> 
>> + def check(cte, exclude=None):
>> + return glibcextract.compare_macro_consts(
>> + '#include <sys/mount.h>\n',
>> + '#include <asm/fcntl.h>\n'
>> + '#include <linux/mount.h>\n',
>> + args.cc,
>> + cte,
>> + exclude,
>> + linux_version_glibc > linux_version_headers,
>> + linux_version_headers > linux_version_glibc)
>> +
>> + status = check('FSOPEN_.*')
>> + sys.exit(status)
>> +
>> +if __name__ == '__main__':
>> + main()
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> index 4e729bdf56..65e5d2150d 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> @@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> index b5d7b9f1ed..4c6371b3c4 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> @@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> GLIBC_2.36 pidfd_send_signal F
> 
> 
> -- 
> Cheers,
> Carlos.


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

* Re: [PATCH v5 2/8] linux: Add fsmount
  2022-06-18  6:15   ` Carlos O'Donell
@ 2022-06-22 12:41     ` Adhemerval Zanella
  0 siblings, 0 replies; 21+ messages in thread
From: Adhemerval Zanella @ 2022-06-22 12:41 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: libc-alpha



> On 18 Jun 2022, at 03:15, Carlos O'Donell <carlos@redhat.com> wrote:
> 
> On 6/6/22 09:44, Adhemerval Zanella wrote:
>> It was added on 5.2 (93766fbd2696c2c4453dd8e1070977e9cd4e6b6d) to
>> provide a way by which a filesystem opened with fsopen and configured
>> by a series of fsconfig calls can have a detached mount object
>> created for it.
> 
> Suggest v6 with updated NEWS. Everything else looks good and matches the kernel.
> 
> Tested-by: Carlos O'Donell <carlos@redhat.com>

Ack.

> 
>> ---
>> NEWS | 4 ++--
>> sysdeps/unix/sysv/linux/Versions | 1 +
>> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/alpha/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/arc/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/csky/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/i386/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/ia64/libc.abilist | 1 +
>> .../sysv/linux/m68k/coldfire/libc.abilist | 1 +
>> .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
>> .../sysv/linux/microblaze/be/libc.abilist | 1 +
>> .../sysv/linux/microblaze/le/libc.abilist | 1 +
>> .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
>> .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
>> .../sysv/linux/mips/mips64/n32/libc.abilist | 1 +
>> .../sysv/linux/mips/mips64/n64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/or1k/libc.abilist | 1 +
>> .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
>> .../powerpc/powerpc32/nofpu/libc.abilist | 1 +
>> .../linux/powerpc/powerpc64/be/libc.abilist | 1 +
>> .../linux/powerpc/powerpc64/le/libc.abilist | 1 +
>> .../unix/sysv/linux/riscv/rv32/libc.abilist | 1 +
>> .../unix/sysv/linux/riscv/rv64/libc.abilist | 1 +
>> .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
>> .../unix/sysv/linux/s390/s390-64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 +
>> .../sysv/linux/sparc/sparc32/libc.abilist | 1 +
>> .../sysv/linux/sparc/sparc64/libc.abilist | 1 +
>> sysdeps/unix/sysv/linux/sys/mount.h | 21 +++++++++++++++++++
>> sysdeps/unix/sysv/linux/syscalls.list | 1 +
>> sysdeps/unix/sysv/linux/tst-mount-consts.py | 6 +++++-
>> .../unix/sysv/linux/x86_64/64/libc.abilist | 1 +
>> .../unix/sysv/linux/x86_64/x32/libc.abilist | 1 +
>> 38 files changed, 63 insertions(+), 3 deletions(-)
>> 
>> diff --git a/NEWS b/NEWS
>> index a94e8c0124..51ca68f1da 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -29,8 +29,8 @@ Major new features:
>> memory is carried out in the context of the caller, using the caller's
>> CPU affinity, and priority with CPU usage accounted to the caller.
>> 
>> -* On Linux, the fsopen has been added. It is a new mount API to allow
>> - more flexibility on mount operations, specially when used along
>> +* On Linux, the fsopen and fsmound have been added. It is a new mount API
>> + to allow more flexibility on mount operations, specially when used along
>> namespaces.
> 
> Suggest:
> 
> * On Linux, the fsopen and fsmount functions have been added. They are part of
> the new Linux kernel mount APIs that allow applications to more flexibly
> configure and operate on filesystem mounts. The new mount APIs are specifically
> designed to work with namespaces.

Ack.

> 
>> 
>> Deprecated and removed features, and other changes affecting compatibility:
>> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
>> index 9ff750ac09..1d5b15aec4 100644
>> --- a/sysdeps/unix/sysv/linux/Versions
>> +++ b/sysdeps/unix/sysv/linux/Versions
>> @@ -300,6 +300,7 @@ libc {
>> epoll_pwait2;
>> }
>> GLIBC_2.36 {
>> + fsmount;
> 
> OK.
> 
>> fsopen;
>> pidfd_open;
>> pidfd_getfd;
>> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> index dedb69abda..bcad128067 100644
>> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> @@ -2616,6 +2616,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> index 67c7c43190..1d88271a25 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> @@ -2713,6 +2713,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
>> index 6b478b9461..c4cc3c17f0 100644
>> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
>> @@ -2377,6 +2377,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
>> index 45af999b89..cfec9daf7a 100644
>> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
>> @@ -496,6 +496,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
>> index 5abdfbd677..b77416d32f 100644
>> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
>> @@ -493,6 +493,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
>> index 1b560da21f..76261943fb 100644
>> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
>> @@ -2652,6 +2652,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> index 09397be929..29352b69ac 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> @@ -2601,6 +2601,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
>> index a3b95efa36..9c465ec784 100644
>> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
>> @@ -2785,6 +2785,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> index 840aa669e5..ad1268e61f 100644
>> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> @@ -2551,6 +2551,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> index 8901429800..c63c140612 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> @@ -497,6 +497,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> index 5d3ccb254f..937ac25d40 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> @@ -2728,6 +2728,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
>> index 651d7e65f8..d144df6ace 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
>> @@ -2701,6 +2701,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
>> index c507fbd83b..87ff6f261f 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
>> @@ -2698,6 +2698,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> index eef92ef698..b0d2b88f14 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> @@ -2693,6 +2693,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> index 92634e2910..2ed23ce297 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> @@ -2691,6 +2691,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> index 5a6a1b8bcd..0048a23416 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> @@ -2699,6 +2699,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> index 0fdf5ff93b..4b10b6bec2 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> @@ -2602,6 +2602,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> index e219863360..8f905a8def 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> @@ -2740,6 +2740,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
>> index 8fef5e2ab8..60c2cdb6e2 100644
>> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
>> @@ -2123,6 +2123,7 @@ GLIBC_2.35 wprintf F
>> GLIBC_2.35 write F
>> GLIBC_2.35 writev F
>> GLIBC_2.35 wscanf F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> index d8a5c77db1..ac5453d9c1 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> @@ -2755,6 +2755,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> index 18cb35378d..772b6d2587 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> @@ -2788,6 +2788,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
>> index e144bb4167..bcf1ed9a1c 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
>> @@ -2510,6 +2510,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
>> index 1f283236cd..cf4452775f 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
>> @@ -2812,6 +2812,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
>> index f76f47d017..48aaada19d 100644
>> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
>> @@ -2379,6 +2379,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> index 93517ae3d6..e08ddc8627 100644
>> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> @@ -2579,6 +2579,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> index 4d2c9ed035..c315714ed8 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> @@ -2753,6 +2753,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> index 71bb7af685..9d83b3cf7d 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> @@ -2547,6 +2547,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
>> index a040860010..8e10946936 100644
>> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
>> @@ -2608,6 +2608,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
>> index 10b7fa3560..6b4d8047c9 100644
>> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
>> @@ -2605,6 +2605,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> index e859089b64..d222061590 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> @@ -2748,6 +2748,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> index 4347e399d6..a8eb190e46 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> @@ -2574,6 +2574,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
>> index 56da283d3f..9fa39c7d09 100644
>> --- a/sysdeps/unix/sysv/linux/sys/mount.h
>> +++ b/sysdeps/unix/sysv/linux/sys/mount.h
>> @@ -137,6 +137,22 @@ enum
>> /* fsopen flags. */
>> #define FSOPEN_CLOEXEC 0x00000001
>> 
>> +/* fsmount flags. */
>> +#define FSMOUNT_CLOEXEC 0x00000001
> 
> OK. Correct value.
> 
>> +
>> +/* mount attributes used on fsmount. */
>> +#define MOUNT_ATTR_RDONLY 0x00000001 /* Mount read-only. */
>> +#define MOUNT_ATTR_NOSUID 0x00000002 /* Ignore suid and sgid bits. */
>> +#define MOUNT_ATTR_NODEV 0x00000004 /* Disallow access to device special files. */
>> +#define MOUNT_ATTR_NOEXEC 0x00000008 /* Disallow program execution. */
>> +#define MOUNT_ATTR__ATIME 0x00000070 /* Setting on how atime should be updated. */
>> +#define MOUNT_ATTR_RELATIME 0x00000000 /* - Update atime relative to mtime/ctime. */
>> +#define MOUNT_ATTR_NOATIME 0x00000010 /* - Do not update access times. */
>> +#define MOUNT_ATTR_STRICTATIME 0x00000020 /* - Always perform atime updates */
>> +#define MOUNT_ATTR_NODIRATIME 0x00000080 /* Do not update directory access times. */
> 
> OK. These were added in v5.2. Values verified.
> 
>> +#define MOUNT_ATTR_IDMAP 0x00100000 /* Idmap mount to @userns_fd in struct mount_attr. */
>> +#define MOUNT_ATTR_NOSYMFOLLOW 0x00200000 /* Do not follow symlinks. */
> 
> OK. These were added later. Values verified.
> 
>> +
>> 
>> __BEGIN_DECLS
>> 
>> @@ -155,6 +171,11 @@ extern int umount2 (const char *__special_file, int __flags) __THROW;
>> mouting. */
>> extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW;
>> 
>> +/* Create a mount representation for the FD created by fsopen using
>> + FLAGS with ATTR_FLAGS describing who the mount is to be performed. */
>> +extern int fsmount (int __fd, unsigned int __flags,
>> +		 unsigned int __ms_flags) __THROW;
> 
> OK. Returns int. Takes int, unsigned int, unsigned int [OK].
> 
>> +
>> __END_DECLS
>> 
>> #endif /* _SYS_MOUNT_H */
>> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
>> index a2919f433d..4ac6fe7659 100644
>> --- a/sysdeps/unix/sysv/linux/syscalls.list
>> +++ b/sysdeps/unix/sysv/linux/syscalls.list
>> @@ -12,6 +12,7 @@ epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
>> eventfd		EXTRA	eventfd2	i:ii	eventfd
>> execve		-	execve		i:spp	__execve	execve
>> flock		-	flock		i:ii	__flock		flock
>> +fsmount		EXTRA	fsmount		i:iUU	fsmount
> 
> OK. i:iUU.
> 
>> fsopen		EXTRA	fsopen		i:sU	fsopen
>> get_kernel_syms	EXTRA	get_kernel_syms	i:p	__compat_get_kernel_syms	get_kernel_syms@GLIBC_2.0:GLIBC_2.23
>> getpid - getpid Ei: __getpid getpid
>> diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> index 162b01147d..4d4a234f3a 100755
>> --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py
>> @@ -46,7 +46,11 @@ def main():
>> linux_version_glibc > linux_version_headers,
>> linux_version_headers > linux_version_glibc)
>> 
>> - status = check('FSOPEN_.*')
>> + status = max(
>> + check('FSOPEN_.*'),
>> + check('FSMOUNT_.*'),
>> + # MOUNT_ATTR_SIZE_VER0 is used for mount_setattr.
>> + check('MOUNT_ATTR_.*', 'MOUNT_ATTR_SIZE_VER0'))
> 
> OK.
> 
>> sys.exit(status)
>> 
>> if __name__ == '__main__':
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> index 65e5d2150d..0293b05d12 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> @@ -2525,6 +2525,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> index 4c6371b3c4..be216f4686 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> @@ -2631,6 +2631,7 @@ GLIBC_2.35 __memcmpeq F
>> GLIBC_2.35 _dl_find_object F
>> GLIBC_2.35 epoll_pwait2 F
>> GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>> +GLIBC_2.36 fsmount F
>> GLIBC_2.36 fsopen F
>> GLIBC_2.36 pidfd_getfd F
>> GLIBC_2.36 pidfd_open F
> 
> 
> -- 
> Cheers,
> Carlos.


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

end of thread, other threads:[~2022-06-22 12:41 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-06 13:44 [PATCH v5 0/8] linux: Add new syscalls Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 1/8] linux: Add fsopen Adhemerval Zanella
2022-06-17 21:28   ` Carlos O'Donell
2022-06-22 12:30     ` Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 2/8] linux: Add fsmount Adhemerval Zanella
2022-06-07 16:14   ` Yann Droneaud
2022-06-10 17:16     ` Adhemerval Zanella
2022-06-18  6:15   ` Carlos O'Donell
2022-06-22 12:41     ` Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 3/8] linux: Add move_mount Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 4/8] linux: Add fsconfig Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 5/8] linux: Add fspick Adhemerval Zanella
2022-06-07 16:19   ` Yann Droneaud
2022-06-10 17:19     ` Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 6/8] linux: Add open_tree Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 7/8] linux: Add tst-mount to check for Linux new mount API Adhemerval Zanella
2022-06-06 13:44 ` [PATCH v5 8/8] linux: Add mount_setattr Adhemerval Zanella
2022-06-07 16:27   ` Yann Droneaud
2022-06-10 17:21     ` Adhemerval Zanella
2022-06-07 16:34   ` Yann Droneaud
2022-06-07 18:10     ` Christian Brauner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).