ipvlan: ignore addresses from ipv6 autoconfiguration
authorKonstantin Khlebnikov <khlebnikov@yandex-team.ru>
Tue, 14 Jul 2015 13:35:55 +0000 (16:35 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Jul 2015 04:33:40 +0000 (21:33 -0700)
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>
drivers/net/ipvlan/ipvlan_main.c

index e995bc501ee6ce08ca337532a356839a837b75d9..20b58bdecf7540100edc5522e74804e6a7544d95 100644 (file)
@@ -655,6 +655,10 @@ static int ipvlan_addr6_event(struct notifier_block *unused,
        struct net_device *dev = (struct net_device *)if6->idev->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))
                return NOTIFY_DONE;