提交 9938dd14 编写于 作者: J Jason A. Donenfeld 提交者: Zheng Zengkai

random: treat bootloader trust toggle the same way as cpu trust toggle

stable inclusion
from stable-v5.10.119
commit f3bc5eca83d37a1a723d4c378a167a83d1b9c771
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I5L6BB

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=f3bc5eca83d37a1a723d4c378a167a83d1b9c771

--------------------------------

commit d97c68d1 upstream.

If CONFIG_RANDOM_TRUST_CPU is set, the RNG initializes using RDRAND.
But, the user can disable (or enable) this behavior by setting
`random.trust_cpu=0/1` on the kernel command line. This allows system
builders to do reasonable things while avoiding howls from tinfoil
hatters. (Or vice versa.)

CONFIG_RANDOM_TRUST_BOOTLOADER is basically the same thing, but regards
the seed passed via EFI or device tree, which might come from RDRAND or
a TPM or somewhere else. In order to allow distros to more easily enable
this while avoiding those same howls (or vice versa), this commit adds
the corresponding `random.trust_bootloader=0/1` toggle.

Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Graham Christensen <graham@grahamc.com>
Reviewed-by: NArd Biesheuvel <ardb@kernel.org>
Reviewed-by: NDominik Brodowski <linux@dominikbrodowski.net>
Link: https://github.com/NixOS/nixpkgs/pull/165355Signed-off-by: NJason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Acked-by: NXie XiuQi <xiexiuqi@huawei.com>
上级 986929a3
...@@ -4233,6 +4233,12 @@ ...@@ -4233,6 +4233,12 @@
fully seed the kernel's CRNG. Default is controlled fully seed the kernel's CRNG. Default is controlled
by CONFIG_RANDOM_TRUST_CPU. by CONFIG_RANDOM_TRUST_CPU.
random.trust_bootloader={on,off}
[KNL] Enable or disable trusting the use of a
seed passed by the bootloader (if available) to
fully seed the kernel's CRNG. Default is controlled
by CONFIG_RANDOM_TRUST_BOOTLOADER.
ras=option[,option,...] [KNL] RAS-specific options ras=option[,option,...] [KNL] RAS-specific options
cec_disable [X86] cec_disable [X86]
......
...@@ -512,4 +512,5 @@ config RANDOM_TRUST_BOOTLOADER ...@@ -512,4 +512,5 @@ config RANDOM_TRUST_BOOTLOADER
device randomness. Say Y here to assume the entropy provided by the device randomness. Say Y here to assume the entropy provided by the
booloader is trustworthy so it will be added to the kernel's entropy booloader is trustworthy so it will be added to the kernel's entropy
pool. Otherwise, say N here so it will be regarded as device input that pool. Otherwise, say N here so it will be regarded as device input that
only mixes the entropy pool. only mixes the entropy pool. This can also be configured at boot with
"random.trust_bootloader=on/off".
...@@ -945,11 +945,17 @@ static bool drain_entropy(void *buf, size_t nbytes) ...@@ -945,11 +945,17 @@ static bool drain_entropy(void *buf, size_t nbytes)
**********************************************************************/ **********************************************************************/
static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU); static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU);
static bool trust_bootloader __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_BOOTLOADER);
static int __init parse_trust_cpu(char *arg) static int __init parse_trust_cpu(char *arg)
{ {
return kstrtobool(arg, &trust_cpu); return kstrtobool(arg, &trust_cpu);
} }
static int __init parse_trust_bootloader(char *arg)
{
return kstrtobool(arg, &trust_bootloader);
}
early_param("random.trust_cpu", parse_trust_cpu); early_param("random.trust_cpu", parse_trust_cpu);
early_param("random.trust_bootloader", parse_trust_bootloader);
/* /*
* The first collection of entropy occurs at system boot while interrupts * The first collection of entropy occurs at system boot while interrupts
...@@ -1157,7 +1163,7 @@ EXPORT_SYMBOL_GPL(add_hwgenerator_randomness); ...@@ -1157,7 +1163,7 @@ EXPORT_SYMBOL_GPL(add_hwgenerator_randomness);
*/ */
void add_bootloader_randomness(const void *buf, size_t size) void add_bootloader_randomness(const void *buf, size_t size)
{ {
if (IS_ENABLED(CONFIG_RANDOM_TRUST_BOOTLOADER)) if (trust_bootloader)
add_hwgenerator_randomness(buf, size, size * 8); add_hwgenerator_randomness(buf, size, size * 8);
else else
add_device_randomness(buf, size); add_device_randomness(buf, size);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册