X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=net%2Fipv6%2Fip6_fib.c;h=6cedc62b2abb1c3520647b4046c1f027ffe1295b;hb=5ba838c97ba143cd971b2cdcbe2c2acbd33e0733;hp=7d2e0023c72dbe2e466b35ffb1c6f0c0446af6da;hpb=c6722ddce0bdf16bfdd7e80dd5fef78e75eca535;p=sagit-ice-cold%2Fkernel_xiaomi_msm8998.git diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index 7d2e0023c72d..6cedc62b2abb 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -285,7 +285,17 @@ struct fib6_table *fib6_get_table(struct net *net, u32 id) struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6, int flags, pol_lookup_t lookup) { - return (struct dst_entry *) lookup(net, net->ipv6.fib6_main_tbl, fl6, flags); + struct rt6_info *rt; + + rt = lookup(net, net->ipv6.fib6_main_tbl, fl6, flags); + if (rt->rt6i_flags & RTF_REJECT && + rt->dst.error == -EAGAIN) { + ip6_rt_put(rt); + rt = net->ipv6.ip6_null_entry; + dst_hold(&rt->dst); + } + + return &rt->dst; } static void __net_init fib6_tables_init(struct net *net)