|
@@ -169,6 +169,7 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
|
|
|
|
|
|
hlist_for_each_entry_rcu(t, head, hash_node) {
|
|
|
if (remote != t->parms.iph.daddr ||
|
|
|
+ t->parms.iph.saddr != 0 ||
|
|
|
!(t->dev->flags & IFF_UP))
|
|
|
continue;
|
|
|
|
|
@@ -185,10 +186,11 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
|
|
|
head = &itn->tunnels[hash];
|
|
|
|
|
|
hlist_for_each_entry_rcu(t, head, hash_node) {
|
|
|
- if ((local != t->parms.iph.saddr &&
|
|
|
- (local != t->parms.iph.daddr ||
|
|
|
- !ipv4_is_multicast(local))) ||
|
|
|
- !(t->dev->flags & IFF_UP))
|
|
|
+ if ((local != t->parms.iph.saddr || t->parms.iph.daddr != 0) &&
|
|
|
+ (local != t->parms.iph.daddr || !ipv4_is_multicast(local)))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (!(t->dev->flags & IFF_UP))
|
|
|
continue;
|
|
|
|
|
|
if (!ip_tunnel_key_match(&t->parms, flags, key))
|
|
@@ -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;
|
|
|
|