diff options
Diffstat (limited to 'net/core/rtnetlink.c')
| -rw-r--r-- | net/core/rtnetlink.c | 15 | 
1 files changed, 8 insertions, 7 deletions
| diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 1ee6460f8275..ba4b4048ec3e 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1523,7 +1523,7 @@ static noinline_for_stack int nla_put_ifalias(struct sk_buff *skb,  static int rtnl_fill_link_netnsid(struct sk_buff *skb,  				  const struct net_device *dev, -				  struct net *src_net) +				  struct net *src_net, gfp_t gfp)  {  	bool put_iflink = false; @@ -1531,7 +1531,7 @@ static int rtnl_fill_link_netnsid(struct sk_buff *skb,  		struct net *link_net = dev->rtnl_link_ops->get_link_net(dev);  		if (!net_eq(dev_net(dev), link_net)) { -			int id = peernet2id_alloc(src_net, link_net); +			int id = peernet2id_alloc(src_net, link_net, gfp);  			if (nla_put_s32(skb, IFLA_LINK_NETNSID, id))  				return -EMSGSIZE; @@ -1589,7 +1589,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,  			    int type, u32 pid, u32 seq, u32 change,  			    unsigned int flags, u32 ext_filter_mask,  			    u32 event, int *new_nsid, int new_ifindex, -			    int tgt_netnsid) +			    int tgt_netnsid, gfp_t gfp)  {  	struct ifinfomsg *ifm;  	struct nlmsghdr *nlh; @@ -1681,7 +1681,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,  			goto nla_put_failure;  	} -	if (rtnl_fill_link_netnsid(skb, dev, src_net)) +	if (rtnl_fill_link_netnsid(skb, dev, src_net, gfp))  		goto nla_put_failure;  	if (new_nsid && @@ -2001,7 +2001,7 @@ walk_entries:  					       NETLINK_CB(cb->skb).portid,  					       nlh->nlmsg_seq, 0, flags,  					       ext_filter_mask, 0, NULL, 0, -					       netnsid); +					       netnsid, GFP_KERNEL);  			if (err < 0) {  				if (likely(skb->len)) @@ -2355,6 +2355,7 @@ static int do_set_master(struct net_device *dev, int ifindex,  			err = ops->ndo_del_slave(upper_dev, dev);  			if (err)  				return err; +			netdev_update_lockdep_key(dev);  		} else {  			return -EOPNOTSUPP;  		} @@ -3359,7 +3360,7 @@ static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh,  	err = rtnl_fill_ifinfo(nskb, dev, net,  			       RTM_NEWLINK, NETLINK_CB(skb).portid,  			       nlh->nlmsg_seq, 0, 0, ext_filter_mask, -			       0, NULL, 0, netnsid); +			       0, NULL, 0, netnsid, GFP_KERNEL);  	if (err < 0) {  		/* -EMSGSIZE implies BUG in if_nlmsg_size */  		WARN_ON(err == -EMSGSIZE); @@ -3471,7 +3472,7 @@ struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev,  	err = rtnl_fill_ifinfo(skb, dev, dev_net(dev),  			       type, 0, 0, change, 0, 0, event, -			       new_nsid, new_ifindex, -1); +			       new_nsid, new_ifindex, -1, flags);  	if (err < 0) {  		/* -EMSGSIZE implies BUG in if_nlmsg_size() */  		WARN_ON(err == -EMSGSIZE); | 

