ip_tunnel: fix i_key matching in ip_tunnel_find
[cascardo/linux.git] / net / ipv4 / ip_tunnel.c
index 3dbb550..9b55315 100644 (file)
@@ -268,6 +268,7 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
        __be32 remote = parms->iph.daddr;
        __be32 local = parms->iph.saddr;
        __be32 key = parms->i_key;
+       __be16 flags = parms->i_flags;
        int link = parms->link;
        struct ip_tunnel *t = NULL;
        struct hlist_head *head = ip_bucket(itn, parms);
@@ -275,9 +276,9 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
        hlist_for_each_entry_rcu(t, head, hash_node) {
                if (local == t->parms.iph.saddr &&
                    remote == t->parms.iph.daddr &&
-                   key == t->parms.i_key &&
                    link == t->parms.link &&
-                   type == t->dev->type)
+                   type == t->dev->type &&
+                   ip_tunnel_key_match(&t->parms, flags, key))
                        break;
        }
        return t;