浏览代码

ipvlan: ignore addresses from ipv6 autoconfiguration

Inet6addr notifier is atomic and runs in bh context without RTNL when
ipv6 receives router advertisement packet and performs autoconfiguration.

Proper fix still in discussion. Let's at least plug the bug.
v1: http://lkml.kernel.org/r/20150514135618.14062.1969.stgit@buzz
v2: http://lkml.kernel.org/r/20150703125840.24121.91556.stgit@buzz

Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Konstantin Khlebnikov 10 年之前
父节点
当前提交
23a5a49c83
共有 1 个文件被更改,包括 4 次插入0 次删除
  1. 4 0
      drivers/net/ipvlan/ipvlan_main.c

+ 4 - 0
drivers/net/ipvlan/ipvlan_main.c

@@ -655,6 +655,10 @@ static int ipvlan_addr6_event(struct notifier_block *unused,
 	struct net_device *dev = (struct net_device *)if6->idev->dev;
 	struct net_device *dev = (struct net_device *)if6->idev->dev;
 	struct ipvl_dev *ipvlan = netdev_priv(dev);
 	struct ipvl_dev *ipvlan = netdev_priv(dev);
 
 
+	/* FIXME IPv6 autoconf calls us from bh without RTNL */
+	if (in_softirq())
+		return NOTIFY_DONE;
+
 	if (!netif_is_ipvlan(dev))
 	if (!netif_is_ipvlan(dev))
 		return NOTIFY_DONE;
 		return NOTIFY_DONE;