Commit 34482e89 authored by Eric W. Biederman's avatar Eric W. Biederman

ns proc: Add support for the uts namespace

Acked-by: default avatarDaniel Lezcano <daniel.lezcano@free.fr>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 13b6f576
...@@ -19,6 +19,9 @@ static const struct proc_ns_operations *ns_entries[] = { ...@@ -19,6 +19,9 @@ static const struct proc_ns_operations *ns_entries[] = {
#ifdef CONFIG_NET_NS #ifdef CONFIG_NET_NS
&netns_operations, &netns_operations,
#endif #endif
#ifdef CONFIG_UTS_NS
&utsns_operations,
#endif
}; };
static const struct file_operations ns_file_operations = { static const struct file_operations ns_file_operations = {
......
...@@ -266,6 +266,7 @@ struct proc_ns_operations { ...@@ -266,6 +266,7 @@ struct proc_ns_operations {
int (*install)(struct nsproxy *nsproxy, void *ns); int (*install)(struct nsproxy *nsproxy, void *ns);
}; };
extern const struct proc_ns_operations netns_operations; extern const struct proc_ns_operations netns_operations;
extern const struct proc_ns_operations utsns_operations;
union proc_op { union proc_op {
int (*proc_get_link)(struct inode *, struct path *); int (*proc_get_link)(struct inode *, struct path *);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/user_namespace.h> #include <linux/user_namespace.h>
#include <linux/proc_fs.h>
static struct uts_namespace *create_uts_ns(void) static struct uts_namespace *create_uts_ns(void)
{ {
...@@ -79,3 +80,41 @@ void free_uts_ns(struct kref *kref) ...@@ -79,3 +80,41 @@ void free_uts_ns(struct kref *kref)
put_user_ns(ns->user_ns); put_user_ns(ns->user_ns);
kfree(ns); kfree(ns);
} }
static void *utsns_get(struct task_struct *task)
{
struct uts_namespace *ns = NULL;
struct nsproxy *nsproxy;
rcu_read_lock();
nsproxy = task_nsproxy(task);
if (nsproxy) {
ns = nsproxy->uts_ns;
get_uts_ns(ns);
}
rcu_read_unlock();
return ns;
}
static void utsns_put(void *ns)
{
put_uts_ns(ns);
}
static int utsns_install(struct nsproxy *nsproxy, void *ns)
{
get_uts_ns(ns);
put_uts_ns(nsproxy->uts_ns);
nsproxy->uts_ns = ns;
return 0;
}
const struct proc_ns_operations utsns_operations = {
.name = "uts",
.type = CLONE_NEWUTS,
.get = utsns_get,
.put = utsns_put,
.install = utsns_install,
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment