linux/drivers/crypto
Jason A. Donenfeld 16bdbae394 hwrng: core - treat default_quality as a maximum and default to 1024
Most hw_random devices return entropy which is assumed to be of full
quality, but driver authors don't bother setting the quality knob. Some
hw_random devices return less than full quality entropy, and then driver
authors set the quality knob. Therefore, the entropy crediting should be
opt-out rather than opt-in per-driver, to reflect the actual reality on
the ground.

For example, the two Raspberry Pi RNG drivers produce full entropy
randomness, and both EDK2 and U-Boot's drivers for these treat them as
such. The result is that EFI then uses these numbers and passes the to
Linux, and Linux credits them as boot, thereby initializing the RNG.
Yet, in Linux, the quality knob was never set to anything, and so on the
chance that Linux is booted without EFI, nothing is ever credited.
That's annoying.

The same pattern appears to repeat itself throughout various drivers. In
fact, very very few drivers have bothered setting quality=1024.

Looking at the git history of existing drivers and corresponding mailing
list discussion, this conclusion tracks. There's been a decent amount of
discussion about drivers that set quality < 1024 -- somebody read and
interepreted a datasheet, or made some back of the envelope calculation
somehow. But there's been very little, if any, discussion about most
drivers where the quality is just set to 1024 or unset (or set to 1000
when the authors misunderstood the API and assumed it was base-10 rather
than base-2); in both cases the intent was fairly clear of, "this is a
hardware random device; it's fine."

So let's invert this logic. A hw_random struct's quality knob now
controls the maximum quality a driver can produce, or 0 to specify 1024.
Then, the module-wide switch called "default_quality" is changed to
represent the maximum quality of any driver. By default it's 1024, and
the quality of any particular driver is then given by:

    min(default_quality, rng->quality ?: 1024);

This way, the user can still turn this off for weird reasons (and we can
replace whatever driver-specific disabling hacks existed in the past),
yet we get proper crediting for relevant RNGs.

Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2022-11-18 16:59:34 +08:00
..
allwinner hwrng: core - treat default_quality as a maximum and default to 1024 2022-11-18 16:59:34 +08:00
amcc crypto: amcc - Hold the reference returned by of_find_compatible_node 2022-07-08 15:21:16 +08:00
amlogic crypto: amlogic - Fix dma_map_sg error check 2022-08-26 18:50:40 +08:00
aspeed crypto: aspeed - Remove redundant dev_err call 2022-09-30 13:59:13 +08:00
axis crypto: artpec6 - Fix printk warning on size_t/%d 2022-09-24 16:14:43 +08:00
bcm crypto: bcm - Simplify obtain the name for cipher 2022-09-30 13:59:13 +08:00
caam hwrng: core - treat default_quality as a maximum and default to 1024 2022-11-18 16:59:34 +08:00
cavium crypto: nitrox - avoid double free on error path in nitrox_sriov_init() 2022-10-21 19:15:35 +08:00
ccp crypto: ccp - Add support for TEE for PCI ID 0x14CA 2022-10-21 19:15:35 +08:00
ccree crypto: ccree - Fix dma_map_sg error check 2022-08-26 18:50:40 +08:00
chelsio crypto: move gf128mul library into lib/crypto 2022-11-11 18:14:59 +08:00
gemini Revert "crypto: gemini - Fix error check for dma_map_sg" 2022-09-02 18:15:53 +08:00
hisilicon crypto: hisilicon/qm - delete redundancy check 2022-10-28 12:36:34 +08:00
inside-secure crypto: inside-secure - Add MaxLinear platform 2022-10-21 19:05:24 +08:00
keembay crypto: keembay-ocs - Drop obsolete dependency on COMPILE_TEST 2022-08-19 18:39:36 +08:00
marvell crypto: octeontx - fix repeated words in comments 2022-10-28 12:36:34 +08:00
nx crypto: nx - Remove the unneeded result variable 2022-09-09 16:18:33 +08:00
qat crypto: qat - remove ADF_STATUS_PF_RUNNING flag from probe 2022-11-11 18:14:59 +08:00
qce crypto: qce - Fix dma_map_sg error check 2022-08-26 18:50:39 +08:00
rockchip crypto: rockchip - Remove surplus dev_err() when using platform_get_irq() 2022-11-11 18:14:59 +08:00
stm32 crypto: stm32 - Fix spelling mistake "wite" -> "write" 2022-10-21 19:15:35 +08:00
ux500 crypto: ux500/hash - drop unexpected word "the" 2022-06-30 15:56:57 +08:00
virtio crypto: virtio - fix memory-leak 2022-09-30 13:57:49 +08:00
vmx crypto: vmx - Fix warning on p8_ghash_alg 2022-07-08 15:21:15 +08:00
xilinx crypto: xilinx: prevent probing on non-xilinx hardware 2022-03-09 15:12:31 +12:00
atmel-aes-regs.h
atmel-aes.c crypto: atmel-aes - Drop if with an always false condition 2022-07-15 16:43:20 +08:00
atmel-authenc.h crypto: sha - split sha.h into sha1.h and sha2.h 2020-11-20 14:45:33 +11:00
atmel-ecc.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
atmel-i2c.c crypto: atmel - Avoid flush_scheduled_work() usage 2022-05-06 18:16:55 +08:00
atmel-i2c.h crypto: atmel - Avoid flush_scheduled_work() usage 2022-05-06 18:16:55 +08:00
atmel-sha204a.c hwrng: core - treat default_quality as a maximum and default to 1024 2022-11-18 16:59:34 +08:00
atmel-sha-regs.h
atmel-sha.c crypto: atmel-sha - initialize sha_dd while declaring 2022-07-15 16:43:22 +08:00
atmel-tdes-regs.h
atmel-tdes.c crypto: atmel-tdes - initialize tdes_dd while declaring 2022-07-15 16:43:22 +08:00
exynos-rng.c
geode-aes.c crypto: geode - use DEFINE_SPINLOCK() for spinlock 2021-04-16 21:16:31 +10:00
geode-aes.h
hifn_795x.c crypto: drivers - use semicolons rather than commas to separate statements 2020-10-02 18:02:15 +10:00
img-hash.c crypto: img-hash - remove need for error return variable ret 2021-09-17 11:06:14 +08:00
ixp4xx_crypto.c crypto: ixp4xx - Fix sparse warnings 2022-10-21 19:15:35 +08:00
Kconfig crypto: rockchip - add debugfs 2022-10-28 12:36:33 +08:00
Makefile crypto: aspeed - Add HACE hash driver 2022-08-26 18:50:37 +08:00
mxs-dcp.c crypto: mxs-dcp - Fix scatterlist processing 2022-01-31 11:21:46 +11:00
n2_asm.S
n2_core.c crypto: n2 - add missing hash statesize 2022-10-21 19:15:35 +08:00
n2_core.h
omap-aes-gcm.c
omap-aes.c crypto: omap-aes - Drop if with an always false condition 2022-07-15 16:43:21 +08:00
omap-aes.h crypto: omap-aes - permit asynchronous skcipher as fallback 2020-07-16 21:49:02 +10:00
omap-crypto.c crypto: omap - Avoid redundant copy when using truncated sg list 2021-08-21 15:44:53 +08:00
omap-crypto.h
omap-des.c crypto: omap-des - Drop if with an always false condition 2022-07-15 16:43:21 +08:00
omap-sham.c crypto: omap-sham - Drop if with an always false condition 2022-07-15 16:43:21 +08:00
padlock-aes.c crypto: algapi - Remove skbuff.h inclusion 2020-08-20 14:04:28 +10:00
padlock-sha.c crypto: sha - split sha.h into sha1.h and sha2.h 2020-11-20 14:45:33 +11:00
qcom-rng.c crypto: qcom-rng - Fix qcom_rng_of_match unused warning 2022-08-19 18:39:35 +08:00
s5p-sss.c crypto: s5p-sss - Drop if with an always false condition 2022-07-15 16:43:21 +08:00
sa2ul.c crypto: sa2ul - Check engine status before enabling 2022-07-15 16:43:22 +08:00
sa2ul.h crypto: sa2ul - Check engine status before enabling 2022-07-15 16:43:22 +08:00
sahara.c crypto: sahara - Fix error check for dma_map_sg 2022-08-26 18:50:39 +08:00
talitos.c crypto: talitos - Use the defined variable to clean code 2022-10-21 19:15:35 +08:00
talitos.h crypto: talitos - Replace zero-length arrays with DECLARE_FLEX_ARRAY() helper 2022-10-21 19:05:24 +08:00