]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fs: add an ioctl to get the mnt ns id from nsfs
authorJosef Bacik <josef@toxicpanda.com>
Mon, 24 Jun 2024 15:49:50 +0000 (11:49 -0400)
committerChristian Brauner <brauner@kernel.org>
Fri, 28 Jun 2024 07:53:31 +0000 (09:53 +0200)
In order to utilize the listmount() and statmount() extensions that
allow us to call them on different namespaces we need a way to get the
mnt namespace id from user space.  Add an ioctl to nsfs that will allow
us to extract the mnt namespace id in order to make these new extensions
usable.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Link: https://lore.kernel.org/r/180449959d5a756af7306d6bda55f41b9d53e3cb.1719243756.git.josef@toxicpanda.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/nsfs.c
include/uapi/linux/nsfs.h

index 07e22a15ef02bb606e355765de0ff024131b2ef5..af352dadffe160b5383f18944455defc255d8ea1 100644 (file)
--- a/fs/nsfs.c
+++ b/fs/nsfs.c
@@ -12,6 +12,7 @@
 #include <linux/nsfs.h>
 #include <linux/uaccess.h>
 
+#include "mount.h"
 #include "internal.h"
 
 static struct vfsmount *nsfs_mnt;
@@ -143,6 +144,19 @@ static long ns_ioctl(struct file *filp, unsigned int ioctl,
                argp = (uid_t __user *) arg;
                uid = from_kuid_munged(current_user_ns(), user_ns->owner);
                return put_user(uid, argp);
+       case NS_GET_MNTNS_ID: {
+               struct mnt_namespace *mnt_ns;
+               __u64 __user *idp;
+               __u64 id;
+
+               if (ns->ops->type != CLONE_NEWNS)
+                       return -EINVAL;
+
+               mnt_ns = container_of(ns, struct mnt_namespace, ns);
+               idp = (__u64 __user *)arg;
+               id = mnt_ns->seq;
+               return put_user(id, idp);
+       }
        default:
                return -ENOTTY;
        }
index a0c8552b64ee04375cf9409b3a48f1b5230bc11e..56e8b1639b98fe579f65a75a3ad94943a2c5bb80 100644 (file)
@@ -15,5 +15,7 @@
 #define NS_GET_NSTYPE          _IO(NSIO, 0x3)
 /* Get owner UID (in the caller's user namespace) for a user namespace */
 #define NS_GET_OWNER_UID       _IO(NSIO, 0x4)
+/* Get the id for a mount namespace */
+#define NS_GET_MNTNS_ID                _IO(NSIO, 0x5)
 
 #endif /* __LINUX_NSFS_H */