On 23/09/10 1:47 -0700, Eric W. Biederman wrote: > > Implementing file descriptors for the network namespace is simple and > straight forward. > > Signed-off-by: Eric W. Biederman [...] > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index c988e68..581a088 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -571,3 +571,33 @@ void unregister_pernet_device(struct pernet_operations *ops) > mutex_unlock(&net_mutex); > } > EXPORT_SYMBOL_GPL(unregister_pernet_device); > + > +#ifdef CONFIG_NET_NS > +static void *netns_get(struct task_struct *task) > +{ > + struct net *net; > + rcu_read_lock(); > + net = get_net(task->nsproxy->net_ns); task could be exiting, so task->nsproxy could be NULL, right? Maybe make proc_ns_instantiate() rcu_dereference task->nsproxy, check for it being not NULL, and pass task->nsproxy to ns_ops->get()? That could be an issue for the user namespace since it is not in nsproxy, but maybe no reasonable usage of ns_ops with user namespaces is envisioned. Otherwise, checking that task is alive with RCU locked in proc_ns_instantiate() should be enough to be rely on task->cred when calling ns_ops->get(). Thanks, Louis > + rcu_read_unlock(); > + return net; > +} > + > +static void netns_put(void *ns) > +{ > + put_net(ns); > +} > + > +static int netns_install(struct nsproxy *nsproxy, void *ns) > +{ > + put_net(nsproxy->net_ns); > + nsproxy->net_ns = get_net(ns); > + return 0; > +} > + > +const struct proc_ns_operations netns_operations = { > + .name = PROC_NSNAME("net"), > + .get = netns_get, > + .put = netns_put, > + .install = netns_install, > +}; > +#endif > -- > 1.6.5.2.143.g8cc62 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- Dr Louis Rilling Kerlabs Skype: louis.rilling Batiment Germanium Phone: (+33|0) 6 80 89 08 23 80 avenue des Buttes de Coesmes http://www.kerlabs.com/ 35700 Rennes