After commit 18c3a61c4264 ("net: ipv6: RTM_GETROUTE: return matched fib result when requested"). When we get a prohibit ertry, we will return -EACCES directly instead of dump route info.
Fix it by remove the rt->dst.error check. Before fix: \# ip -6 route add prohibit 2003::/64 dev eth1 \# ip -6 route get fibmatch 2003::1 RTNETLINK answers: Permission denied \# ip -6 route add unreachable 2004::/64 dev eth1 \# ip -6 route get fibmatch 2004::1 RTNETLINK answers: No route to host After fix: \# ip -6 route add prohibit 2003::/64 dev eth1 \# ip -6 route get fibmatch 2003::1 prohibit 2003::/64 dev lo metric 1024 error -13 pref medium \# ip -6 route add unreachable 2004::/64 dev eth1 \# ip -6 route get fibmatch 2004::1 unreachable 2004::/64 dev lo metric 1024 error -113 pref medium Fixes: 18c3a61c4264 ("net: ipv6: RTM_GETROUTE: return matched fib...") Signed-off-by: Hangbin Liu <liuhang...@gmail.com> --- net/ipv6/route.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 4d30c96..8fc52de 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3637,12 +3637,6 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, dst = ip6_route_lookup(net, &fl6, 0); rt = container_of(dst, struct rt6_info, dst); - if (rt->dst.error) { - err = rt->dst.error; - ip6_rt_put(rt); - goto errout; - } - if (rt == net->ipv6.ip6_null_entry) { err = rt->dst.error; ip6_rt_put(rt); -- 2.5.5