diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-06-14 02:16:42 -0700 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-11-18 22:46:19 -0800 |
commit | d727abcb2355566a3372ee1810f156fba75112b7 (patch) | |
tree | ed23c68e67d158d251a8e4677e40dcd9c8fdb541 /include/net | |
parent | 499dcf2024092e5cce41d05599a5b51d1f92031a (diff) | |
download | op-kernel-dev-d727abcb2355566a3372ee1810f156fba75112b7.zip op-kernel-dev-d727abcb2355566a3372ee1810f156fba75112b7.tar.gz |
netns: Deduplicate and fix copy_net_ns when !CONFIG_NET_NS
The copy of copy_net_ns used when the network stack is not
built is broken as it does not return -EINVAL when attempting
to create a new network namespace. We don't even have
a previous network namespace.
Since we need a copy of copy_net_ns in net/net_namespace.h that is
available when the networking stack is not built at all move the
correct version of copy_net_ns from net_namespace.c into net_namespace.h
Leaving us with just 2 versions of copy_net_ns. One version for when
we compile in network namespace suport and another stub for all other
occasions.
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/net_namespace.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 95e6466..32dcb60 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -126,16 +126,19 @@ struct net { /* Init's network namespace */ extern struct net init_net; -#ifdef CONFIG_NET +#ifdef CONFIG_NET_NS extern struct net *copy_net_ns(unsigned long flags, struct net *net_ns); -#else /* CONFIG_NET */ -static inline struct net *copy_net_ns(unsigned long flags, struct net *net_ns) +#else /* CONFIG_NET_NS */ +#include <linux/sched.h> +#include <linux/nsproxy.h> +static inline struct net *copy_net_ns(unsigned long flags, struct net *old_net) { - /* There is nothing to copy so this is a noop */ - return net_ns; + if (flags & CLONE_NEWNET) + return ERR_PTR(-EINVAL); + return old_net; } -#endif /* CONFIG_NET */ +#endif /* CONFIG_NET_NS */ extern struct list_head net_namespace_list; |