aboutsummaryrefslogtreecommitdiffstats
path: root/net/dcb
diff options
context:
space:
mode:
authorJohn Fastabend <john.fastabend@gmail.com>2012-12-09 15:48:13 -0500
committerDavid S. Miller <davem@davemloft.net>2012-12-10 14:09:01 -0500
commit7c77ab24e30bad7598b5cfda93be6f32ed439c2f (patch)
treef806a2e6f510d5e206e3bb85cb8732a310a4ea09 /net/dcb
parent7b9e75802f1c50bfeae53c86c0bfbc5c45fd8719 (diff)
net: Allow DCBnl to use other namespaces besides init_net
Allow DCB and net namespace to work together. This is useful if you have containers that are bound to 'phys' interfaces that want to also manage their DCB attributes. The net namespace is taken from sock_net(skb->sk) of the netlink skb. CC: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dcb')
-rw-r--r--net/dcb/dcbnl.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
index b07c75d37e91..1b588e23cf80 100644
--- a/net/dcb/dcbnl.c
+++ b/net/dcb/dcbnl.c
@@ -1665,9 +1665,6 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1665 if ((nlh->nlmsg_type == RTM_SETDCB) && !capable(CAP_NET_ADMIN)) 1665 if ((nlh->nlmsg_type == RTM_SETDCB) && !capable(CAP_NET_ADMIN))
1666 return -EPERM; 1666 return -EPERM;
1667 1667
1668 if (!net_eq(net, &init_net))
1669 return -EINVAL;
1670
1671 ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX, 1668 ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX,
1672 dcbnl_rtnl_policy); 1669 dcbnl_rtnl_policy);
1673 if (ret < 0) 1670 if (ret < 0)
@@ -1684,7 +1681,7 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1684 if (!tb[DCB_ATTR_IFNAME]) 1681 if (!tb[DCB_ATTR_IFNAME])
1685 return -EINVAL; 1682 return -EINVAL;
1686 1683
1687 netdev = dev_get_by_name(&init_net, nla_data(tb[DCB_ATTR_IFNAME])); 1684 netdev = dev_get_by_name(net, nla_data(tb[DCB_ATTR_IFNAME]));
1688 if (!netdev) 1685 if (!netdev)
1689 return -ENODEV; 1686 return -ENODEV;
1690 1687
@@ -1708,7 +1705,7 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1708 1705
1709 nlmsg_end(reply_skb, reply_nlh); 1706 nlmsg_end(reply_skb, reply_nlh);
1710 1707
1711 ret = rtnl_unicast(reply_skb, &init_net, portid); 1708 ret = rtnl_unicast(reply_skb, net, portid);
1712out: 1709out:
1713 dev_put(netdev); 1710 dev_put(netdev);
1714 return ret; 1711 return ret;