Some namespaces types want have their own ioctls.
For, example, pid namespace needs a ioctl, allowing
to set vector of ns_last_pid on namespaces hierarchy.

This patch introduces proc_ns_operations::ns_ioctl()
to allow namespaces determine specific ioctls.

Signed-off-by: Kirill Tkhai <[email protected]>
---
 fs/nsfs.c                 |    4 ++++
 include/linux/proc_ns.h   |    1 +
 include/uapi/linux/nsfs.h |    2 ++
 3 files changed, 7 insertions(+)

diff --git a/fs/nsfs.c b/fs/nsfs.c
index 1656843e87d2..fed7e5c59e9c 100644
--- a/fs/nsfs.c
+++ b/fs/nsfs.c
@@ -185,6 +185,10 @@ 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_SPECIFIC_IOC:
+               if (!ns->ops->ns_ioctl)
+                       return -ENOTTY;
+               return ns->ops->ns_ioctl(ns, arg);
        default:
                return -ENOTTY;
        }
diff --git a/include/linux/proc_ns.h b/include/linux/proc_ns.h
index 12cb8bd81d2d..c645a2174933 100644
--- a/include/linux/proc_ns.h
+++ b/include/linux/proc_ns.h
@@ -20,6 +20,7 @@ struct proc_ns_operations {
        int (*install)(struct nsproxy *nsproxy, struct ns_common *ns);
        struct user_namespace *(*owner)(struct ns_common *ns);
        struct ns_common *(*get_parent)(struct ns_common *ns);
+       long (*ns_ioctl)(struct ns_common *ns, unsigned long arg);
 };
 
 extern const struct proc_ns_operations netns_operations;
diff --git a/include/uapi/linux/nsfs.h b/include/uapi/linux/nsfs.h
index 1a3ca79f466b..544bbb661475 100644
--- a/include/uapi/linux/nsfs.h
+++ b/include/uapi/linux/nsfs.h
@@ -14,5 +14,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)
+/* Execute namespace-specific ioctl */
+#define NS_SPECIFIC_IOC                _IO(NSIO, 0x5)
 
 #endif /* __LINUX_NSFS_H */

Reply via email to