[INET]: Use jhash + random secret for ehash.
The days are gone when this was not an issue, there are folks out there with huge bot networks that can be used to attack the established hash tables on remote systems. So just like the routing cache and connection tracking hash, use Jenkins hash with random secret input. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
d30045a0bc
commit
b3da2cf37c
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/jhash.h>
|
||||
|
||||
#include <net/flow.h>
|
||||
#include <net/sock.h>
|
||||
@@ -167,13 +168,15 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to,
|
||||
|
||||
extern int inet_sk_rebuild_header(struct sock *sk);
|
||||
|
||||
extern u32 inet_ehash_secret;
|
||||
extern void build_ehash_secret(void);
|
||||
|
||||
static inline unsigned int inet_ehashfn(const __be32 laddr, const __u16 lport,
|
||||
const __be32 faddr, const __be16 fport)
|
||||
{
|
||||
unsigned int h = ((__force __u32)laddr ^ lport) ^ ((__force __u32)faddr ^ (__force __u32)fport);
|
||||
h ^= h >> 16;
|
||||
h ^= h >> 8;
|
||||
return h;
|
||||
return jhash_2words((__force __u32) laddr ^ (__force __u32) faddr,
|
||||
((__u32) lport) << 16 | (__force __u32)fport,
|
||||
inet_ehash_secret);
|
||||
}
|
||||
|
||||
static inline int inet_sk_ehashfn(const struct sock *sk)
|
||||
|
Reference in New Issue
Block a user