Revert "blackhole_netdev: fix syzkaller reported issue"
authorMahesh Bandewar <maheshb@google.com>
Wed, 16 Oct 2019 07:04:38 +0000 (00:04 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Oct 2019 17:41:26 +0000 (13:41 -0400)
This reverts commit b0818f80c8c1bc215bba276bd61c216014fab23b.

Started seeing weird behavior after this patch especially in
the IPv6 code path. Haven't root caused it, but since this was
applied to net branch, taking a precautionary measure to revert
it and look / analyze those failures

Revert this now and I'll send a better fix after analysing / fixing
the weirdness observed.

CC: Eric Dumazet <edumazet@google.com>
CC: Wei Wang <weiwan@google.com>
CC: David S. Miller <davem@davemloft.net>
Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c
net/ipv6/route.c

index 4c87594d1389d6e0927cbfa0ff7b5e631c331e84..34ccef18b40e60e283a63c18102fef8b927cbfaf 100644 (file)
@@ -6996,7 +6996,7 @@ static struct rtnl_af_ops inet6_ops __read_mostly = {
 
 int __init addrconf_init(void)
 {
-       struct inet6_dev *idev, *bdev;
+       struct inet6_dev *idev;
        int i, err;
 
        err = ipv6_addr_label_init();
@@ -7036,14 +7036,10 @@ int __init addrconf_init(void)
         */
        rtnl_lock();
        idev = ipv6_add_dev(init_net.loopback_dev);
-       bdev = ipv6_add_dev(blackhole_netdev);
        rtnl_unlock();
        if (IS_ERR(idev)) {
                err = PTR_ERR(idev);
                goto errlo;
-       } else if (IS_ERR(bdev)) {
-               err = PTR_ERR(bdev);
-               goto errlo;
        }
 
        ip6_route_init_special_entries();
@@ -7128,7 +7124,6 @@ void addrconf_cleanup(void)
                addrconf_ifdown(dev, 1);
        }
        addrconf_ifdown(init_net.loopback_dev, 2);
-       addrconf_ifdown(blackhole_netdev, 2);
 
        /*
         *      Check hash table.
index 7421207288690078f021117980a28fd01c3a4255..a63ff85fe14198fc23a5cbc7abcd107df5df00c8 100644 (file)
@@ -155,9 +155,10 @@ void rt6_uncached_list_del(struct rt6_info *rt)
 
 static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
 {
+       struct net_device *loopback_dev = net->loopback_dev;
        int cpu;
 
-       if (dev == net->loopback_dev)
+       if (dev == loopback_dev)
                return;
 
        for_each_possible_cpu(cpu) {
@@ -170,7 +171,7 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
                        struct net_device *rt_dev = rt->dst.dev;
 
                        if (rt_idev->dev == dev) {
-                               rt->rt6i_idev = in6_dev_get(blackhole_netdev);
+                               rt->rt6i_idev = in6_dev_get(loopback_dev);
                                in6_dev_put(rt_idev);
                        }
 
@@ -385,11 +386,13 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev,
 {
        struct rt6_info *rt = (struct rt6_info *)dst;
        struct inet6_dev *idev = rt->rt6i_idev;
+       struct net_device *loopback_dev =
+               dev_net(dev)->loopback_dev;
 
-       if (idev && idev->dev != dev_net(dev)->loopback_dev) {
-               struct inet6_dev *ibdev = in6_dev_get(blackhole_netdev);
-               if (ibdev) {
-                       rt->rt6i_idev = ibdev;
+       if (idev && idev->dev != loopback_dev) {
+               struct inet6_dev *loopback_idev = in6_dev_get(loopback_dev);
+               if (loopback_idev) {
+                       rt->rt6i_idev = loopback_idev;
                        in6_dev_put(idev);
                }
        }