X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=net%2Fipv6%2Fip6_fib.c;h=6cedc62b2abb1c3520647b4046c1f027ffe1295b;hb=95fc00a4e15e804356d01c1c53c7da3d99a94f20;hp=7d2e0023c72dbe2e466b35ffb1c6f0c0446af6da;hpb=22ca7ca52e80524360b43944a0556b2a6dc1aa21;p=karo-tx-linux.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)