• Linus Torvalds's avatar
    Merge tag 'v6.6-vfs.fchmodat2' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs · 475d4df8
    Linus Torvalds authored
    Pull fchmodat2 system call from Christian Brauner:
     "This adds the fchmodat2() system call. It is a revised version of the
      fchmodat() system call, adding a missing flag argument. Support for
      both AT_SYMLINK_NOFOLLOW and AT_EMPTY_PATH are included.
    
      Adding this system call revision has been a longstanding request but
      so far has always fallen through the cracks. While the kernel
      implementation of fchmodat() does not have a flag argument the libc
      provided POSIX-compliant fchmodat(3) version does. Both glibc and musl
      have to implement a workaround in order to support AT_SYMLINK_NOFOLLOW
      (see [1] and [2]).
    
      The workaround is brittle because it relies not just on O_PATH and
      O_NOFOLLOW semantics and procfs magic links but also on our rather
      inconsistent symlink semantics.
    
      This gives userspace a proper fchmodat2() system call that libcs can
      use to properly implement fchmodat(3) and allows them to get rid of
      their hacks. In this case it will immediately benefit them as the
      current workaround is already defunct because of aformentioned
      inconsistencies.
    
      In addition to AT_SYMLINK_NOFOLLOW, give userspace the ability to use
      AT_EMPTY_PATH with fchmodat2(). This is already possible with
      fchownat() so there's no reason to not also support it for
      fchmodat2().
    
      The implementation is simple and comes with selftests. Implementation
      of the system call and wiring up the system call are done as separate
      patches even though they could arguably be one patch. But in case
      there are merge conflicts from other system call additions it can be
      beneficial to have separate patches"
    
    Link: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/fchmodat.c;h=17eca54051ee28ba1ec3f9aed170a62630959143;hb=a492b1e5ef7ab50c6fdd4e4e9879ea5569ab0a6c#l35 [1]
    Link: https://git.musl-libc.org/cgit/musl/tree/src/stat/fchmodat.c?id=718f363bc2067b6487900eddc9180c84e7739f80#n28 [2]
    
    * tag 'v6.6-vfs.fchmodat2' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
      selftests: fchmodat2: remove duplicate unneeded defines
      fchmodat2: add support for AT_EMPTY_PATH
      selftests: Add fchmodat2 selftest
      arch: Register fchmodat2, usually as syscall 452
      fs: Add fchmodat2()
      Non-functional cleanup of a "__user * filename"
    475d4df8
open.c 40.7 KB