Message ID | 9ccee167b001a643109fcb61130e32ccf96080ee.1600770261.git.sd@queasysnail.net |
---|---|
State | New |
Headers | show |
Series | net: iflink and link-netnsid fixes | expand |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 01146b66d666..688e441a8699 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -5835,7 +5835,7 @@ static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, (dev->addr_len && nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) || nla_put_u32(skb, IFLA_MTU, dev->mtu) || - (dev->ifindex != dev_get_iflink(dev) && + (dev->netdev_ops && dev->netdev_ops->ndo_get_iflink && nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))) || nla_put_u8(skb, IFLA_OPERSTATE, netif_running(dev) ? dev->operstate : IF_OPER_DOWN))
IPv6 tries to detect if devices have a lower link when dumping addresses, but that detection doesn't work when the device and its link have the same ifindex. In this setup: ip netns add main ip netns add peer ip -net main link add dummy0 type dummy # ifidx 9 ip -net main link add link dummy0 macvlan0 up netns peer type macvlan # ifidx 9 We'll get: ip -net peer -6 a 9: macvlan0: <snip> Instead of: ip -net peer -6 a 9: macvlan0@if9: <snip> Instead of calling dev_get_iflink(), we can use the existence of the ndo_get_iflink operation (which dev_get_iflink would call) to check if a device has a lower link. Fixes: d8a5ec672768 ("[NET]: netlink support for moving devices between network namespaces.") Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> --- net/ipv6/addrconf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)