mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 07:01:32 +00:00
net: ipv4: Make "ip route get" match iif lo rules again.
Commit3765d35ed8
("net: ipv4: Convert inet_rtm_getroute to rcu versions of route lookup") broke "ip route get" in the presence of rules that specify iif lo. Host-originated traffic always has iif lo, because ip_route_output_key_hash and ip6_route_output_flags set the flow iif to LOOPBACK_IFINDEX. Thus, putting "iif lo" in an ip rule is a convenient way to select only originated traffic and not forwarded traffic. inet_rtm_getroute used to match these rules correctly because even though it sets the flow iif to 0, it called ip_route_output_key which overwrites iif with LOOPBACK_IFINDEX. But now that it calls ip_route_output_key_hash_rcu, the ifindex will remain 0 and not match the iif lo in the rule. As a result, "ip route get" will return ENETUNREACH. Fixes:3765d35ed8
("net: ipv4: Convert inet_rtm_getroute to rcu versions of route lookup") Tested: https://android.googlesource.com/kernel/tests/+/master/net/test/multinetwork_test.py passes again Signed-off-by: Lorenzo Colitti <lorenzo@google.com> Acked-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cbbdf8433a
commit
6503a30440
@ -2762,6 +2762,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
||||
if (err == 0 && rt->dst.error)
|
||||
err = -rt->dst.error;
|
||||
} else {
|
||||
fl4.flowi4_iif = LOOPBACK_IFINDEX;
|
||||
rt = ip_route_output_key_hash_rcu(net, &fl4, &res, skb);
|
||||
err = 0;
|
||||
if (IS_ERR(rt))
|
||||
|
Loading…
Reference in New Issue
Block a user