diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
| -rw-r--r-- | net/ipv6/addrconf.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index d7c56f8a5b4..0424e4e2741 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -3064,14 +3064,15 @@ static struct inet6_ifaddr *if6_get_first(struct seq_file *seq, loff_t pos)  		struct hlist_node *n;  		hlist_for_each_entry_rcu_bh(ifa, n, &inet6_addr_lst[state->bucket],  					 addr_lst) { +			if (!net_eq(dev_net(ifa->idev->dev), net)) +				continue;  			/* sync with offset */  			if (p < state->offset) {  				p++;  				continue;  			}  			state->offset++; -			if (net_eq(dev_net(ifa->idev->dev), net)) -				return ifa; +			return ifa;  		}  		/* prepare for next bucket */ @@ -3089,18 +3090,20 @@ static struct inet6_ifaddr *if6_get_next(struct seq_file *seq,  	struct hlist_node *n = &ifa->addr_lst;  	hlist_for_each_entry_continue_rcu_bh(ifa, n, addr_lst) { +		if (!net_eq(dev_net(ifa->idev->dev), net)) +			continue;  		state->offset++; -		if (net_eq(dev_net(ifa->idev->dev), net)) -			return ifa; +		return ifa;  	}  	while (++state->bucket < IN6_ADDR_HSIZE) {  		state->offset = 0;  		hlist_for_each_entry_rcu_bh(ifa, n,  				     &inet6_addr_lst[state->bucket], addr_lst) { +			if (!net_eq(dev_net(ifa->idev->dev), net)) +				continue;  			state->offset++; -			if (net_eq(dev_net(ifa->idev->dev), net)) -				return ifa; +			return ifa;  		}  	}  |