Message ID | 20220622125223.14336-4-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | linux: Add new syscalls | expand |
On 6/22/22 08:52, Adhemerval Zanella wrote: > 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. LGTM. Though I note that we don't mirror the kernel headers since we leave out MOVE_MOUNT__MASK, and I'm OK with that until someone requests it and we can have a discussion about why we need it. Today only the kernel syscall code uses it to check the flag validity, it's entirely an implementation detail leaking into the UAPI headers. Tested on x86_64 and i686 with no regressions. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com> > --- > NEWS | 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 + > .../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, 59 insertions(+), 5 deletions(-) > > diff --git a/NEWS b/NEWS > index c83bc57fd4..b79e833b10 100644 > --- a/NEWS > +++ b/NEWS > @@ -29,10 +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 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. > +* On Linux, the fsopen, fsmount, and move_mount 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. OK. > > 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 6d55c55de8..50ec65c7a3 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 */ OK. We don't define MOVE_MOUNT__MASK though, and userspace may expect it, I'm OK with that for now until we get a request that we need the macro. In reality only the kernel code itself uses it to validate the mask in linux/fs/namespace.c. > + > + > __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; OK. Matches SYSCALL_DEFINE5 in the kernel "int, const char *, int, const char *, unsigned int" > + > __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 OK. returns int, takes arguments of int, const char *, int, const char *, usngined int. OK. Kernel says you can use an empty string for the path names, but not a NULL string so 's' OK. > 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 c40266beb5..5c6e774ba4 100755 > --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py > +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py > @@ -51,7 +51,9 @@ def main(): > > status = max( > check('FSOPEN_.*'), > - check('FSMOUNT_.*')) > + check('FSMOUNT_.*'), > + # MOVE_MOUNT__MASK may vary depending of the kernel version. > + check('MOVE_MOUNT_.*', 'MOVE_MOUNT__MASK')) 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 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
diff --git a/NEWS b/NEWS index c83bc57fd4..b79e833b10 100644 --- a/NEWS +++ b/NEWS @@ -29,10 +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 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. +* On Linux, the fsopen, fsmount, and move_mount 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 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 6d55c55de8..50ec65c7a3 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 c40266beb5..5c6e774ba4 100755 --- a/sysdeps/unix/sysv/linux/tst-mount-consts.py +++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py @@ -51,7 +51,9 @@ def main(): status = max( check('FSOPEN_.*'), - check('FSMOUNT_.*')) + check('FSMOUNT_.*'), + # 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