linux/net/core
Eric Dumazet 558d2bdad5 net/flow_dissector: switch to siphash
[ Upstream commit 55667441c8 ]

UDP IPv6 packets auto flowlabels are using a 32bit secret
(static u32 hashrnd in net/core/flow_dissector.c) and
apply jhash() over fields known by the receivers.

Attackers can easily infer the 32bit secret and use this information
to identify a device and/or user, since this 32bit secret is only
set at boot time.

Really, using jhash() to generate cookies sent on the wire
is a serious security concern.

Trying to change the rol32(hash, 16) in ip6_make_flowlabel() would be
a dead end. Trying to periodically change the secret (like in sch_sfq.c)
could change paths taken in the network for long lived flows.

Let's switch to siphash, as we did in commit df453700e8
("inet: switch IP ID generator to siphash")

Using a cryptographically strong pseudo random function will solve this
privacy issue and more generally remove other weak points in the stack.

Packet schedulers using skb_get_hash_perturb() benefit from this change.

Fixes: b56774163f ("ipv6: Enable auto flow labels by default")
Fixes: 42240901f7 ("ipv6: Implement different admin modes for automatic flow labels")
Fixes: 67800f9b1f ("ipv6: Call skb_get_hash_flowi6 to get skb->hash in ip6_make_flowlabel")
Fixes: cb1ce2ef38 ("ipv6: Implement automatic flow label generation on transmit")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Jonathan Berger <jonathann1@walla.com>
Reported-by: Amit Klein <aksecurity@gmail.com>
Reported-by: Benny Pinkas <benny@pinkas.net>
Cc: Tom Herbert <tom@herbertland.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-11-10 11:27:54 +01:00
..
datagram.c net: add READ_ONCE() annotation in __skb_wait_for_more_packets() 2019-11-10 11:27:49 +01:00
dev_addr_lists.c
dev_ioctl.c
dev.c netns: fix GFP flags in rtnl_net_notifyid() 2019-11-10 11:27:42 +01:00
devlink.c
drop_monitor.c
dst_cache.c
dst.c
ethtool.c net: Zeroing the structure ethtool_wolinfo in ethtool_get_wol() 2019-11-10 11:27:44 +01:00
failover.c
fib_notifier.c
fib_rules.c
filter.c bpf: allow narrow loads of some sk_reuseport_md fields with offset > 0 2019-09-21 07:16:59 +02:00
flow_dissector.c net/flow_dissector: switch to siphash 2019-11-10 11:27:54 +01:00
gen_estimator.c
gen_stats.c
gro_cells.c
hwbm.c
link_watch.c
lwt_bpf.c
lwtunnel.c
Makefile
neighbour.c
net_namespace.c netns: fix GFP flags in rtnl_net_notifyid() 2019-11-10 11:27:42 +01:00
net-procfs.c
net-sysfs.c
net-sysfs.h
net-traces.c
netclassid_cgroup.c
netevent.c
netpoll.c
netprio_cgroup.c
page_pool.c
pktgen.c
ptp_classifier.c
request_sock.c
rtnetlink.c netns: fix GFP flags in rtnl_net_notifyid() 2019-11-10 11:27:42 +01:00
scm.c
secure_seq.c
skbuff.c
sock_diag.c
sock_reuseport.c
sock.c net: use skb_queue_empty_lockless() in busy poll contexts 2019-11-10 11:27:49 +01:00
stream.c
sysctl_net_core.c
timestamping.c
tso.c
utils.c
xdp.c