mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
Revert "blackhole_netdev: fix syzkaller reported issue"
This reverts commit b0818f80c8
.
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>
This commit is contained in:
parent
77b6d09f4a
commit
bd74708cd9
@ -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.
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user