Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 251668
b: refs/heads/master
c: 34482e8
h: refs/heads/master
v: v3
  • Loading branch information
Eric W. Biederman committed May 10, 2011
1 parent 33c96e4 commit 8069e9a
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 13b6f57623bc485e116344fe91fbcb29f149242b
refs/heads/master: 34482e89a5218f0f9317abf1cfba3bb38b5c29dd
3 changes: 3 additions & 0 deletions trunk/fs/proc/namespaces.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ static const struct proc_ns_operations *ns_entries[] = {
#ifdef CONFIG_NET_NS
&netns_operations,
#endif
#ifdef CONFIG_UTS_NS
&utsns_operations,
#endif
};

static const struct file_operations ns_file_operations = {
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/proc_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ struct proc_ns_operations {
int (*install)(struct nsproxy *nsproxy, void *ns);
};
extern const struct proc_ns_operations netns_operations;
extern const struct proc_ns_operations utsns_operations;

union proc_op {
int (*proc_get_link)(struct inode *, struct path *);
Expand Down
39 changes: 39 additions & 0 deletions trunk/kernel/utsname.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/user_namespace.h>
#include <linux/proc_fs.h>

static struct uts_namespace *create_uts_ns(void)
{
Expand Down Expand Up @@ -79,3 +80,41 @@ void free_uts_ns(struct kref *kref)
put_user_ns(ns->user_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,
};

0 comments on commit 8069e9a

Please sign in to comment.