Following patch fixes tunnel hashing bug by using correct key length.
This bug was introduced by commit f686a33af8cb41ee228e6a35410c9a488fba3eb1

Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
---
 datapath/tunnel.c |    7 +++++--
 datapath/tunnel.h |    2 ++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/datapath/tunnel.c b/datapath/tunnel.c
index 100794e..81b97d3 100644
--- a/datapath/tunnel.c
+++ b/datapath/tunnel.c
@@ -174,7 +174,7 @@ static unsigned int *find_port_pool(const struct 
tnl_mutable_config *mutable)
 
 static u32 port_hash(const struct port_lookup_key *key)
 {
-       return jhash2((u32*)key, (sizeof(*key) / sizeof(u32)), 0);
+       return jhash2((u32*)key, (PORT_KEY_LEN / sizeof(u32)), 0);
 }
 
 static inline struct hlist_head *find_bucket(u32 hash)
@@ -241,7 +241,7 @@ static struct tnl_vport *port_table_lookup(struct 
port_lookup_key *key,
                struct tnl_mutable_config *mutable;
 
                mutable = rcu_dereference_rtnl(tnl_vport->mutable);
-               if (!memcmp(&mutable->key, key, sizeof(*key))) {
+               if (!memcmp(&mutable->key, key, PORT_KEY_LEN)) {
                        *pmutable = mutable;
                        return tnl_vport;
                }
@@ -1512,6 +1512,9 @@ int tnl_init(void)
 {
        int i;
 
+       BUILD_BUG_ON(PORT_KEY_LEN !=
+        (offsetof(struct port_lookup_key, tunnel_type) + sizeof(u32)));
+
        port_table = kmalloc(PORT_TABLE_SIZE * sizeof(struct hlist_head *),
                        GFP_KERNEL);
        if (!port_table)
diff --git a/datapath/tunnel.h b/datapath/tunnel.h
index b3e21fa..7149319 100644
--- a/datapath/tunnel.h
+++ b/datapath/tunnel.h
@@ -58,6 +58,8 @@ struct port_lookup_key {
        u32    tunnel_type;
 };
 
+#define PORT_KEY_LEN   20
+
 /**
  * struct tnl_mutable_config - modifiable configuration for a tunnel.
  * @key: Used as key for tunnel port.  Configured via OVS_TUNNEL_ATTR_*
-- 
1.7.1

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to