linux/drivers
George Spelvin c51f8f88d7 random32: make prandom_u32() output unpredictable
Non-cryptographic PRNGs may have great statistical properties, but
are usually trivially predictable to someone who knows the algorithm,
given a small sample of their output.  An LFSR like prandom_u32() is
particularly simple, even if the sample is widely scattered bits.

It turns out the network stack uses prandom_u32() for some things like
random port numbers which it would prefer are *not* trivially predictable.
Predictability led to a practical DNS spoofing attack.  Oops.

This patch replaces the LFSR with a homebrew cryptographic PRNG based
on the SipHash round function, which is in turn seeded with 128 bits
of strong random key.  (The authors of SipHash have *not* been consulted
about this abuse of their algorithm.)  Speed is prioritized over security;
attacks are rare, while performance is always wanted.

Replacing all callers of prandom_u32() is the quick fix.
Whether to reinstate a weaker PRNG for uses which can tolerate it
is an open question.

Commit f227e3ec3b ("random32: update the net random state on interrupt
and activity") was an earlier attempt at a solution.  This patch replaces
it.

Reported-by: Amit Klein <aksecurity@gmail.com>
Cc: Willy Tarreau <w@1wt.eu>
Cc: Eric Dumazet <edumazet@google.com>
Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: tytso@mit.edu
Cc: Florian Westphal <fw@strlen.de>
Cc: Marc Plumb <lkml.mplumb@gmail.com>
Fixes: f227e3ec3b ("random32: update the net random state on interrupt and activity")
Signed-off-by: George Spelvin <lkml@sdf.org>
Link: https://lore.kernel.org/netdev/20200808152628.GA27941@SDF.ORG/
[ willy: partial reversal of f227e3ec3b5c; moved SIPROUND definitions
  to prandom.h for later use; merged George's prandom_seed() proposal;
  inlined siprand_u32(); replaced the net_rand_state[] array with 4
  members to fix a build issue; cosmetic cleanups to make checkpatch
  happy; fixed RANDOM32_SELFTEST build ]
Signed-off-by: Willy Tarreau <w@1wt.eu>
2020-10-24 20:21:57 +02:00
..
accessibility
acpi More ACPI updates for 5.10-rc1 2020-10-23 16:38:36 -07:00
amba
android task_work: cleanup notification modes 2020-10-17 15:05:30 -06:00
ata ata: ahci: mvebu: Make SATA PHY optional for Armada 3720 2020-10-09 12:47:56 -06:00
atm
auxdisplay
base More power management updates for 5.10-rc1 2020-10-23 16:27:03 -07:00
bcma
block We have: 2020-10-21 10:34:10 -07:00
bluetooth networking changes for the 5.10 merge window 2020-10-15 18:42:13 -07:00
bus Char/Misc driver patches for 5.10-rc1 2020-10-15 10:01:51 -07:00
cdrom
char random32: make prandom_u32() output unpredictable 2020-10-24 20:21:57 +02:00
clk This pull request contains zero diff to the core framework. It is a collection 2020-10-22 12:53:28 -07:00
clocksource hyperv-next for 5.10 2020-10-14 10:32:10 -07:00
connector
counter
cpufreq More power management updates for 5.10-rc1 2020-10-23 16:27:03 -07:00
cpuidle powerpc updates for 5.10 2020-10-16 12:21:15 -07:00
crypto s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
dax fuse update for 5.10 2020-10-19 14:28:30 -07:00
dca
devfreq
dio
dma dmaengine: owl-dma: fix kernel-doc style for enum 2020-10-08 15:18:48 +05:30
dma-buf dma-mapping updates for 5.10 2020-10-15 14:43:29 -07:00
edac EFI changes for v5.10: 2020-10-12 13:26:49 -07:00
eisa
extcon
firewire
firmware Merge branch 'dmi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging 2020-10-21 11:15:42 -07:00
fpga
fsi
gnss
gpio - New Drivers 2020-10-14 15:56:58 -07:00
gpu drm fixes (round two) for 5.10-rc1 2020-10-23 13:56:34 -07:00
greybus
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2020-10-23 16:16:31 -07:00
hsi
hv Merge branch 'akpm' (patches from Andrew) 2020-10-16 11:31:55 -07:00
hwmon Driver Core patches for 5.10-rc1 2020-10-14 16:09:32 -07:00
hwspinlock
hwtracing intel_th: pci: Add Alder Lake CPU support 2020-10-05 12:43:54 +02:00
i2c Merge branch 'i2c/for-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2020-10-21 10:54:05 -07:00
i3c * Fix DAA for the pre-reserved address case 2020-10-17 11:01:01 -07:00
ide block-5.10-2020-10-12 2020-10-13 12:12:44 -07:00
idle intel_idle: Ignore _CST if control cannot be taken from the platform 2020-10-16 17:28:32 +02:00
iio chrome platform changes for 5.10 2020-10-23 10:54:13 -07:00
infiniband RDMA 5.10 pull request 2020-10-17 11:18:18 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2020-10-23 16:16:31 -07:00
interconnect
iommu IOMMU Fix for Linux v5.10: 2020-10-20 09:35:06 -07:00
ipack
irqchip - New Drivers 2020-10-14 15:56:58 -07:00
isdn
leds leds: pwm: Remove platform_data support 2020-10-07 12:02:58 +02:00
lightnvm
macintosh powerpc updates for 5.10 2020-10-16 12:21:15 -07:00
mailbox mailbox: avoid timer start from callback 2020-10-16 19:09:17 -05:00
mcb
md - Improve DM core's bio splitting to use blk_max_size_offset(). Also 2020-10-14 15:05:38 -07:00
media dma-mapping updates for 5.10 2020-10-15 14:43:29 -07:00
memory IOMMU Updates for Linux v5.10 2020-10-14 12:08:34 -07:00
memstick
message SCSI misc on 20201013 2020-10-14 15:15:35 -07:00
mfd - New Drivers 2020-10-14 15:56:58 -07:00
misc pci-v5.10-changes 2020-10-22 12:41:00 -07:00
mmc block-5.10-2020-10-12 2020-10-13 12:12:44 -07:00
most
mtd This pull request contains fixes for UBI and UBIFS 2020-10-18 09:56:50 -07:00
mux
net Fixes for 5.10-rc1 from the networking tree: 2020-10-23 12:05:49 -07:00
nfc nfc: remove unneeded break 2020-10-20 10:36:41 -07:00
ntb
nubus
nvdimm mm/memremap_pages: support multiple ranges per invocation 2020-10-13 18:38:28 -07:00
nvme drivers-5.10-2020-10-12 2020-10-13 13:04:41 -07:00
nvmem
of networking changes for the 5.10 merge window 2020-10-15 18:42:13 -07:00
opp Merge branch 'cpufreq/arm/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm 2020-10-06 12:26:45 +02:00
oprofile
parisc dma-mapping: split <linux/dma-mapping.h> 2020-10-06 07:07:03 +02:00
parport
pci VFIO updates for v5.10-rc1 2020-10-22 13:00:44 -07:00
pcmcia
perf perf: arm-cmn: Fix conversion specifiers for node type 2020-10-01 22:30:07 +01:00
phy pci-v5.10-changes 2020-10-22 12:41:00 -07:00
pinctrl Pin control bulk changes for the v5.10 kernel cycle 2020-10-14 15:25:04 -07:00
platform Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2020-10-23 16:16:31 -07:00
pnp PNP: remove the now unused pnp_find_card() function 2020-10-08 18:00:08 +02:00
power More power management updates for 5.10-rc1 2020-10-23 16:27:03 -07:00
powercap powercap: Fix typo in Kconfig "Plance" -> "Plane" 2020-10-19 17:40:53 +02:00
pps
ps3
ptp
pwm chrome platform changes for 5.10 2020-10-23 10:54:13 -07:00
rapidio rapidio: fix the missed put_device() for rio_mport_add_riodev 2020-10-16 11:11:22 -07:00
ras
regulator Merge remote-tracking branch 'regulator/for-5.10' into regulator-next 2020-10-05 16:54:56 +01:00
remoteproc remoteproc updates for v5.10 2020-10-22 12:56:33 -07:00
reset
rpmsg rpmsg updates for 5.10 2020-10-22 12:58:21 -07:00
rtc RTC for 5.10 2020-10-21 11:22:08 -07:00
s390 s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
sbus
scsi SCSI misc on 20201023 2020-10-23 16:19:02 -07:00
sfi
sh
siox
slimbus
soc PM: AVS: qcom-cpr: Move the driver to the qcom specific drivers 2020-10-22 18:38:21 +02:00
soundwire soundwire updates for 5.10-rc1 2020-10-01 22:59:55 +02:00
spi sound updates for 5.10 2020-10-15 11:07:44 -07:00
spmi
ssb
staging pci-v5.10-changes 2020-10-22 12:41:00 -07:00
target SCSI misc on 20201023 2020-10-23 16:19:02 -07:00
tc
tee
thermal - Fix Kconfig typo "acces" -> "access" (Colin Ian King) 2020-10-17 10:40:22 -07:00
thunderbolt
tty MIPS updates for v5.10: 2020-10-16 12:40:55 -07:00
uio
usb dma-mapping updates for 5.10 2020-10-15 14:43:29 -07:00
vdpa vhost,vdpa,virtio: cleanups, fixes 2020-10-23 11:00:57 -07:00
vfio VFIO updates for v5.10-rc1 2020-10-22 13:00:44 -07:00
vhost vhost_vdpa: remove unnecessary spin_lock in vhost_vring_call 2020-10-21 10:48:10 -04:00
video Merge branch 'parisc-5.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux 2020-10-15 15:42:55 -07:00
virt virt: vbox: simplify the return expression of vbg_input_open() 2020-10-02 11:36:13 +02:00
virtio vhost,vdpa,virtio: cleanups, fixes 2020-10-23 11:00:57 -07:00
visorbus
vlynq
vme
w1 w1: w1_therm: make w1_poll_completion static 2020-10-05 14:49:24 +02:00
watchdog linux-watchdog 5.10-rc1 tag 2020-10-21 11:28:43 -07:00
xen xen: branch for v5.10-rc1b 2020-10-20 09:24:01 -07:00
zorro
Kconfig
Makefile