aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/siphash.h6
-rw-r--r--lib/siphash.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/include/linux/siphash.h b/include/linux/siphash.h
index fa7a6b9cedbf..c5abb71ad844 100644
--- a/include/linux/siphash.h
+++ b/include/linux/siphash.h
@@ -86,7 +86,11 @@ static inline u64 siphash(const void *data, size_t len,
#define HSIPHASH_ALIGNMENT __alignof__(unsigned long)
typedef struct {
- unsigned long key[2];
+#if BITS_PER_LONG == 64
+ u64 key[2];
+#else
+ u32 key[4];
+#endif
} hsiphash_key_t;
u32 __hsiphash_aligned(const void *data, size_t len,
diff --git a/lib/siphash.c b/lib/siphash.c
index 3ae58b4edad6..cca5b9fc2207 100644
--- a/lib/siphash.c
+++ b/lib/siphash.c
@@ -413,9 +413,13 @@ EXPORT_SYMBOL(hsiphash_4u32);
HSIPROUND; \
v0 ^= b; \
v2 ^= 0xff; \
+ v1 ^= key->key[2]; \
+ v3 ^= key->key[3]; \
HSIPROUND; \
HSIPROUND; \
HSIPROUND; \
+ v1 ^= key->key[2]; \
+ v3 ^= key->key[3]; \
return v1 ^ v3;
u32 __hsiphash_aligned(const void *data, size_t len, const hsiphash_key_t *key)