Data for hashing required to be array of u32. Make sure that
element data always multiple of u32.

Ported from a patch proposed by Sergey Popovich <popovich_ser...@mail.ua>.

Signed-off-by: Jozsef Kadlecsik <kad...@blackhole.kfki.hu>
---
 net/netfilter/ipset/ip_set_hash_gen.h | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/net/netfilter/ipset/ip_set_hash_gen.h 
b/net/netfilter/ipset/ip_set_hash_gen.h
index 6c88c20..34f115f 100644
--- a/net/netfilter/ipset/ip_set_hash_gen.h
+++ b/net/netfilter/ipset/ip_set_hash_gen.h
@@ -260,8 +260,14 @@ struct net_prefixes {
 #endif
 
 #define HKEY(data, initval, htable_bits)                       \
-(jhash2((u32 *)(data), HKEY_DATALEN / sizeof(u32), initval)    \
-       & jhash_mask(htable_bits))
+({                                                             \
+       const u32 *__k = (const u32 *)data;                     \
+       u32 __l = HKEY_DATALEN / sizeof(u32);                   \
+                                                               \
+       BUILD_BUG_ON(HKEY_DATALEN % sizeof(u32) != 0);          \
+                                                               \
+       jhash2(__k, __l, initval) & jhash_mask(htable_bits);    \
+})
 
 #ifndef htype
 #ifndef HTYPE
-- 
1.8.5.1

--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to