forked from mirrors/linux
		
	ieee802154: fix netns settings
6LoWPAN currently doesn't supports x-netns and works only in init_net. With this patch, we ensure that: - the wpan interface cannot be moved to another netns; - the 6lowpan interface cannot be moved to another netns; - the wpan interface is in the same netns than the 6lowpan interface; - the 6lowpan interface is in init_net. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
		
							parent
							
								
									a715d11e45
								
							
						
					
					
						commit
						f9d1ce8f81
					
				
					 2 changed files with 5 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -126,6 +126,7 @@ static void lowpan_setup(struct net_device *dev)
 | 
			
		|||
	dev->header_ops		= &lowpan_header_ops;
 | 
			
		||||
	dev->ml_priv		= &lowpan_mlme;
 | 
			
		||||
	dev->destructor		= free_netdev;
 | 
			
		||||
	dev->features		|= NETIF_F_NETNS_LOCAL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int lowpan_validate(struct nlattr *tb[], struct nlattr *data[])
 | 
			
		||||
| 
						 | 
				
			
			@ -148,10 +149,11 @@ static int lowpan_newlink(struct net *src_net, struct net_device *dev,
 | 
			
		|||
 | 
			
		||||
	pr_debug("adding new link\n");
 | 
			
		||||
 | 
			
		||||
	if (!tb[IFLA_LINK])
 | 
			
		||||
	if (!tb[IFLA_LINK] ||
 | 
			
		||||
	    !net_eq(dev_net(dev), &init_net))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	/* find and hold real wpan device */
 | 
			
		||||
	real_dev = dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
 | 
			
		||||
	real_dev = dev_get_by_index(dev_net(dev), nla_get_u32(tb[IFLA_LINK]));
 | 
			
		||||
	if (!real_dev)
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
	if (real_dev->type != ARPHRD_IEEE802154) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -225,6 +225,7 @@ static int cfg802154_netdev_notifier_call(struct notifier_block *nb,
 | 
			
		|||
	switch (state) {
 | 
			
		||||
		/* TODO NETDEV_DEVTYPE */
 | 
			
		||||
	case NETDEV_REGISTER:
 | 
			
		||||
		dev->features |= NETIF_F_NETNS_LOCAL;
 | 
			
		||||
		wpan_dev->identifier = ++rdev->wpan_dev_id;
 | 
			
		||||
		list_add_rcu(&wpan_dev->list, &rdev->wpan_dev_list);
 | 
			
		||||
		rdev->devlist_generation++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue