• Linus Torvalds's avatar
    Merge tag 'vfs-6.11.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs · f608caba
    Linus Torvalds authored
    Pull vfs mount query updates from Christian Brauner:
     "This contains work to extend the abilities of listmount() and
      statmount() and various fixes and cleanups.
    
      Features:
    
       - Allow iterating through mounts via listmount() from newest to
         oldest. This makes it possible for mount(8) to keep iterating the
         mount table in reverse order so it gets newest mounts first.
    
       - Relax permissions on listmount() and statmount().
    
         It's not necessary to have capabilities in the initial namespace:
         it is sufficient to have capabilities in the owning namespace of
         the mount namespace we're located in to list unreachable mounts in
         that namespace.
    
       - Extend both listmount() and statmount() to list and stat mounts in
         foreign mount namespaces.
    
         Currently the only way to iterate over mount entries in mount
         namespaces that aren't in the caller's mount namespace is by
         crawling through /proc in order to find /proc/<pid>/mountinfo for
         the relevant mount namespace.
    
         This is both very clumsy and hugely inefficient. So extend struct
         mnt_id_req with a new member that allows to specify the mount
         namespace id of the mount namespace we want to look at.
    
         Luckily internally we already have most of the infrastructure for
         this so we just need to expose it to userspace. Give userspace a
         way to retrieve the id of a mount namespace via statmount() and
         through a new nsfs ioctl() on mount namespace file descriptor.
    
         This comes with appropriate selftests.
    
       - Expose mount options through statmount().
    
         Currently if userspace wants to get mount options for a mount and
         with statmount(), they still have to open /proc/<pid>/mountinfo to
         parse mount options. Simply the information through statmount()
         directly.
    
         Afterwards it's possible to only rely on statmount() and
         listmount() to retrieve all and more information than
         /proc/<pid>/mountinfo provides.
    
         This comes with appropriate selftests.
    
      Fixes:
    
       - Avoid copying to userspace under the namespace semaphore in
         listmount.
    
      Cleanups:
    
       - Simplify the error handling in listmount by relying on our newly
         added cleanup infrastructure.
    
       - Refuse invalid mount ids early for both listmount and statmount"
    
    * tag 'vfs-6.11.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
      fs: reject invalid last mount id early
      fs: refuse mnt id requests with invalid ids early
      fs: find rootfs mount of the mount namespace
      fs: only copy to userspace on success in listmount()
      sefltests: extend the statmount test for mount options
      fs: use guard for namespace_sem in statmount()
      fs: export mount options via statmount()
      fs: rename show_mnt_opts -> show_vfsmnt_opts
      selftests: add a test for the foreign mnt ns extensions
      fs: add an ioctl to get the mnt ns id from nsfs
      fs: Allow statmount() in foreign mount namespace
      fs: Allow listmount() in foreign mount namespace
      fs: export the mount ns id via statmount
      fs: keep an index of current mount namespaces
      fs: relax permissions for statmount()
      listmount: allow listing in reverse order
      fs: relax permissions for listmount()
      fs: simplify error handling
      fs: don't copy to userspace under namespace semaphore
      path: add cleanup helper
    f608caba
mount.h 4.35 KB