From: Dmitry Popov <redacted>
Date: Sat, 5 Jul 2014 02:26:37 +0400
quoted hunk ↗ jump to hunk
@@ -205,6 +207,8 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
hlist_for_each_entry_rcu(t, head, hash_node) {
if (t->parms.i_key != key ||
+ t->parms.iph.saddr != 0 ||
+ t->parms.iph.daddr != 0 ||
!(t->dev->flags & IFF_UP))
continue;
I don't really understand the logic of these tests.
Usually the canonical way to test these kinds of things is:
if (parms->saddr && parms->saddr != saddr)
goto no_match;
But you are signalling a non-match any time the address is not a
wildcard.
Why?