diff options
Diffstat (limited to 'net/core/rtnetlink.c')
| -rw-r--r-- | net/core/rtnetlink.c | 5 | 
1 files changed, 4 insertions, 1 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 2d56cb9b0b9..abd936d8a71 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1046,6 +1046,7 @@ const struct nla_policy ifla_policy[IFLA_MAX+1] = {  	[IFLA_LINKMODE]		= { .type = NLA_U8 },  	[IFLA_LINKINFO]		= { .type = NLA_NESTED },  	[IFLA_NET_NS_PID]	= { .type = NLA_U32 }, +	[IFLA_NET_NS_FD]	= { .type = NLA_U32 },  	[IFLA_IFALIAS]	        = { .type = NLA_STRING, .len = IFALIASZ-1 },  	[IFLA_VFINFO_LIST]	= {. type = NLA_NESTED },  	[IFLA_VF_PORTS]		= { .type = NLA_NESTED }, @@ -1094,6 +1095,8 @@ struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])  	 */  	if (tb[IFLA_NET_NS_PID])  		net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID])); +	else if (tb[IFLA_NET_NS_FD]) +		net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));  	else  		net = get_net(src_net);  	return net; @@ -1224,7 +1227,7 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,  	int send_addr_notify = 0;  	int err; -	if (tb[IFLA_NET_NS_PID]) { +	if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {  		struct net *net = rtnl_link_get_net(dev_net(dev), tb);  		if (IS_ERR(net)) {  			err = PTR_ERR(net);  |