add listmount(2) syscall
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 25 Oct 2023 14:02:03 +0000 (16:02 +0200)
committerChristian Brauner <brauner@kernel.org>
Thu, 14 Dec 2023 10:49:17 +0000 (11:49 +0100)
commitb4c2bea8ceaa50cd42a8f73667389d801a3ecf2d
tree840f95317cfa1468b784232fa0e97bd5918adea9
parent68385d77c05b401f748acecc0e0a8eff10489334
add listmount(2) syscall

Add way to query the children of a particular mount.  This is a more
flexible way to iterate the mount tree than having to parse
/proc/self/mountinfo.

Lookup the mount by the new 64bit mount ID. If a mount needs to be
queried based on path, then statx(2) can be used to first query the
mount ID belonging to the path.

Return an array of new (64bit) mount ID's. Without privileges only
mounts are listed which are reachable from the task's root.

Folded into this patch are several later improvements. Keeping them
separate would make the history pointlessly confusing:

* Recursive listing of mounts is the default now (cf. [1]).
* Remove explicit LISTMOUNT_UNREACHABLE flag (cf. [1]) and fail if mount
  is unreachable from current root. This also makes permission checking
  consistent with statmount() (cf. [3]).
* Start listing mounts in unique mount ID order (cf. [2]) to allow
  continuing listmount() from a midpoint.
* Allow to continue listmount(). The @request_mask parameter is renamed
  and to @param to be usable by both statmount() and listmount().
  If @param is set to a mount id then listmount() will continue listing
  mounts from that id on. This allows listing mounts in multiple
  listmount invocations without having to resize the buffer. If @param
  is zero then the listing starts from the beginning (cf. [4]).
* Don't return EOVERFLOW, instead return the buffer size which allows to
  detect a full buffer as well (cf. [4]).

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Link: https://lore.kernel.org/r/20231025140205.3586473-6-mszeredi@redhat.com
Reviewed-by: Ian Kent <raven@themaw.net>
Link: https://lore.kernel.org/r/20231128160337.29094-2-mszeredi@redhat.com
Link: https://lore.kernel.org/r/20231128160337.29094-3-mszeredi@redhat.com
Link: https://lore.kernel.org/r/20231128160337.29094-4-mszeredi@redhat.com
Link: https://lore.kernel.org/r/20231128160337.29094-5-mszeredi@redhat.com
[Christian Brauner <brauner@kernel.org>: various smaller fixes]
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/namespace.c
include/linux/syscalls.h
include/uapi/linux/mount.h