]> granicus.if.org Git - ipset/commitdiff
Make sure element data size is a multiple of u32
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 26 Jun 2015 09:16:28 +0000 (11:16 +0200)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 26 Jun 2015 09:16:28 +0000 (11:16 +0200)
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_sergei@mail.ua>.

kernel/net/netfilter/ipset/ip_set_hash_gen.h

index a635964188659cdccd1109782e432de5d62e0c76..8dc18c4209e0be96733dcd2cf7ff11829565c563 100644 (file)
@@ -257,8 +257,14 @@ htable_bits(u32 hashsize)
 #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