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)
|
int __init addrconf_init(void)
|
||||||
{
|
{
|
||||||
struct inet6_dev *idev, *bdev;
|
struct inet6_dev *idev;
|
||||||
int i, err;
|
int i, err;
|
||||||
|
|
||||||
err = ipv6_addr_label_init();
|
err = ipv6_addr_label_init();
|
||||||
@ -7036,14 +7036,10 @@ int __init addrconf_init(void)
|
|||||||
*/
|
*/
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
idev = ipv6_add_dev(init_net.loopback_dev);
|
idev = ipv6_add_dev(init_net.loopback_dev);
|
||||||
bdev = ipv6_add_dev(blackhole_netdev);
|
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
if (IS_ERR(idev)) {
|
if (IS_ERR(idev)) {
|
||||||
err = PTR_ERR(idev);
|
err = PTR_ERR(idev);
|
||||||
goto errlo;
|
goto errlo;
|
||||||
} else if (IS_ERR(bdev)) {
|
|
||||||
err = PTR_ERR(bdev);
|
|
||||||
goto errlo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ip6_route_init_special_entries();
|
ip6_route_init_special_entries();
|
||||||
@ -7128,7 +7124,6 @@ void addrconf_cleanup(void)
|
|||||||
addrconf_ifdown(dev, 1);
|
addrconf_ifdown(dev, 1);
|
||||||
}
|
}
|
||||||
addrconf_ifdown(init_net.loopback_dev, 2);
|
addrconf_ifdown(init_net.loopback_dev, 2);
|
||||||
addrconf_ifdown(blackhole_netdev, 2);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check hash table.
|
* 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)
|
static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
struct net_device *loopback_dev = net->loopback_dev;
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
if (dev == net->loopback_dev)
|
if (dev == loopback_dev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for_each_possible_cpu(cpu) {
|
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;
|
struct net_device *rt_dev = rt->dst.dev;
|
||||||
|
|
||||||
if (rt_idev->dev == 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);
|
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 rt6_info *rt = (struct rt6_info *)dst;
|
||||||
struct inet6_dev *idev = rt->rt6i_idev;
|
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) {
|
if (idev && idev->dev != loopback_dev) {
|
||||||
struct inet6_dev *ibdev = in6_dev_get(blackhole_netdev);
|
struct inet6_dev *loopback_idev = in6_dev_get(loopback_dev);
|
||||||
if (ibdev) {
|
if (loopback_idev) {
|
||||||
rt->rt6i_idev = ibdev;
|
rt->rt6i_idev = loopback_idev;
|
||||||
in6_dev_put(idev);
|
in6_dev_put(idev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user