summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--0001-random-add-a-config-option-to-trust-the-CPU-s-hwrng.patch78
-rw-r--r--0001-random-make-CPU-trust-a-boot-parameter.patch82
-rw-r--r--configs/fedora/generic/CONFIG_RANDOM_TRUST_CPU1
-rw-r--r--kernel-aarch64-debug.config1
-rw-r--r--kernel-aarch64.config1
-rw-r--r--kernel-armv7hl-debug.config1
-rw-r--r--kernel-armv7hl-lpae-debug.config1
-rw-r--r--kernel-armv7hl-lpae.config1
-rw-r--r--kernel-armv7hl.config1
-rw-r--r--kernel-i686-PAE.config1
-rw-r--r--kernel-i686-PAEdebug.config1
-rw-r--r--kernel-i686-debug.config1
-rw-r--r--kernel-i686.config1
-rw-r--r--kernel-ppc64-debug.config1
-rw-r--r--kernel-ppc64.config1
-rw-r--r--kernel-ppc64le-debug.config1
-rw-r--r--kernel-ppc64le.config1
-rw-r--r--kernel-s390x-debug.config1
-rw-r--r--kernel-s390x.config1
-rw-r--r--kernel-x86_64-debug.config1
-rw-r--r--kernel-x86_64.config1
-rw-r--r--kernel.spec7
22 files changed, 186 insertions, 0 deletions
diff --git a/0001-random-add-a-config-option-to-trust-the-CPU-s-hwrng.patch b/0001-random-add-a-config-option-to-trust-the-CPU-s-hwrng.patch
new file mode 100644
index 000000000..8a2f68f82
--- /dev/null
+++ b/0001-random-add-a-config-option-to-trust-the-CPU-s-hwrng.patch
@@ -0,0 +1,78 @@
+From 39a8883a2b989d1d21bd8dd99f5557f0c5e89694 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Tue, 17 Jul 2018 18:24:27 -0400
+Subject: [PATCH] random: add a config option to trust the CPU's hwrng
+
+This gives the user building their own kernel (or a Linux
+distribution) the option of deciding whether or not to trust the CPU's
+hardware random number generator (e.g., RDRAND for x86 CPU's) as being
+correctly implemented and not having a back door introduced (perhaps
+courtesy of a Nation State's law enforcement or intelligence
+agencies).
+
+This will prevent getrandom(2) from blocking, if there is a
+willingness to trust the CPU manufacturer.
+
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+---
+ drivers/char/Kconfig | 14 ++++++++++++++
+ drivers/char/random.c | 11 ++++++++++-
+ 2 files changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
+index 212f447938ae..ce277ee0a28a 100644
+--- a/drivers/char/Kconfig
++++ b/drivers/char/Kconfig
+@@ -554,3 +554,17 @@ config ADI
+
+ endmenu
+
++config RANDOM_TRUST_CPU
++ bool "Trust the CPU manufacturer to initialize Linux's CRNG"
++ depends on X86 || S390 || PPC
++ default n
++ help
++ Assume that CPU manufacturer (e.g., Intel or AMD for RDSEED or
++ RDRAND, IBM for the S390 and Power PC architectures) is trustworthy
++ for the purposes of initializing Linux's CRNG. Since this is not
++ something that can be independently audited, this amounts to trusting
++ that CPU manufacturer (perhaps with the insistence or mandate
++ of a Nation State's intelligence or law enforcement agencies)
++ has not installed a hidden back door to compromise the CPU's
++ random number generation facilities.
++
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index 34ddfd57419b..f4013b8a711b 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -782,6 +782,7 @@ static void invalidate_batched_entropy(void);
+ static void crng_initialize(struct crng_state *crng)
+ {
+ int i;
++ int arch_init = 1;
+ unsigned long rv;
+
+ memcpy(&crng->state[0], "expand 32-byte k", 16);
+@@ -792,10 +793,18 @@ static void crng_initialize(struct crng_state *crng)
+ _get_random_bytes(&crng->state[4], sizeof(__u32) * 12);
+ for (i = 4; i < 16; i++) {
+ if (!arch_get_random_seed_long(&rv) &&
+- !arch_get_random_long(&rv))
++ !arch_get_random_long(&rv)) {
+ rv = random_get_entropy();
++ arch_init = 0;
++ }
+ crng->state[i] ^= rv;
+ }
++#ifdef CONFIG_RANDOM_TRUST_CPU
++ if (arch_init) {
++ crng_init = 2;
++ pr_notice("random: crng done (trusting CPU's manufacturer)\n");
++ }
++#endif
+ crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
+ }
+
+--
+2.17.1
+
diff --git a/0001-random-make-CPU-trust-a-boot-parameter.patch b/0001-random-make-CPU-trust-a-boot-parameter.patch
new file mode 100644
index 000000000..33695fcb4
--- /dev/null
+++ b/0001-random-make-CPU-trust-a-boot-parameter.patch
@@ -0,0 +1,82 @@
+From 9b25436662d5fb4c66eb527ead53cab15f596ee0 Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook@chromium.org>
+Date: Mon, 27 Aug 2018 14:51:54 -0700
+Subject: [PATCH] random: make CPU trust a boot parameter
+
+Instead of forcing a distro or other system builder to choose
+at build time whether the CPU is trusted for CRNG seeding via
+CONFIG_RANDOM_TRUST_CPU, provide a boot-time parameter for end users to
+control the choice. The CONFIG will set the default state instead.
+
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+---
+ Documentation/admin-guide/kernel-parameters.txt | 6 ++++++
+ drivers/char/Kconfig | 4 ++--
+ drivers/char/random.c | 11 ++++++++---
+ 3 files changed, 16 insertions(+), 5 deletions(-)
+
+diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
+index 0c8f7889efa1..227c5c6fa4c1 100644
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -3390,6 +3390,12 @@
+ ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
+ See Documentation/blockdev/ramdisk.txt.
+
++ random.trust_cpu={on,off}
++ [KNL] Enable or disable trusting the use of the
++ CPU's random number generator (if available) to
++ fully seed the kernel's CRNG. Default is controlled
++ by CONFIG_RANDOM_TRUST_CPU.
++
+ ras=option[,option,...] [KNL] RAS-specific options
+
+ cec_disable [X86]
+diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
+index ce277ee0a28a..40728491f37b 100644
+--- a/drivers/char/Kconfig
++++ b/drivers/char/Kconfig
+@@ -566,5 +566,5 @@ config RANDOM_TRUST_CPU
+ that CPU manufacturer (perhaps with the insistence or mandate
+ of a Nation State's intelligence or law enforcement agencies)
+ has not installed a hidden back door to compromise the CPU's
+- random number generation facilities.
+-
++ random number generation facilities. This can also be configured
++ at boot with "random.trust_cpu=on/off".
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index bf5f99fc36f1..c75b6cdf0053 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -779,6 +779,13 @@ static struct crng_state **crng_node_pool __read_mostly;
+
+ static void invalidate_batched_entropy(void);
+
++static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU);
++static int __init parse_trust_cpu(char *arg)
++{
++ return kstrtobool(arg, &trust_cpu);
++}
++early_param("random.trust_cpu", parse_trust_cpu);
++
+ static void crng_initialize(struct crng_state *crng)
+ {
+ int i;
+@@ -799,12 +806,10 @@ static void crng_initialize(struct crng_state *crng)
+ }
+ crng->state[i] ^= rv;
+ }
+-#ifdef CONFIG_RANDOM_TRUST_CPU
+- if (arch_init) {
++ if (trust_cpu && arch_init) {
+ crng_init = 2;
+ pr_notice("random: crng done (trusting CPU's manufacturer)\n");
+ }
+-#endif
+ crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
+ }
+
+--
+2.17.1
+
diff --git a/configs/fedora/generic/CONFIG_RANDOM_TRUST_CPU b/configs/fedora/generic/CONFIG_RANDOM_TRUST_CPU
new file mode 100644
index 000000000..f79be1a54
--- /dev/null
+++ b/configs/fedora/generic/CONFIG_RANDOM_TRUST_CPU
@@ -0,0 +1 @@
+CONFIG_RANDOM_TRUST_CPU=y
diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config
index f734d7520..12f8271d2 100644
--- a/kernel-aarch64-debug.config
+++ b/kernel-aarch64-debug.config
@@ -4660,6 +4660,7 @@ CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
diff --git a/kernel-aarch64.config b/kernel-aarch64.config
index dab2ad954..9c01708e5 100644
--- a/kernel-aarch64.config
+++ b/kernel-aarch64.config
@@ -4637,6 +4637,7 @@ CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config
index 5823451df..90a245a15 100644
--- a/kernel-armv7hl-debug.config
+++ b/kernel-armv7hl-debug.config
@@ -4937,6 +4937,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config
index 04c35dd30..b80b756ef 100644
--- a/kernel-armv7hl-lpae-debug.config
+++ b/kernel-armv7hl-lpae-debug.config
@@ -4661,6 +4661,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config
index 92864bf46..56aa1f6bb 100644
--- a/kernel-armv7hl-lpae.config
+++ b/kernel-armv7hl-lpae.config
@@ -4638,6 +4638,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config
index 446304e4e..3717f07f2 100644
--- a/kernel-armv7hl.config
+++ b/kernel-armv7hl.config
@@ -4914,6 +4914,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config
index 6780dfce9..00f6f0303 100644
--- a/kernel-i686-PAE.config
+++ b/kernel-i686-PAE.config
@@ -4390,6 +4390,7 @@ CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config
index 8a0eded81..27702813c 100644
--- a/kernel-i686-PAEdebug.config
+++ b/kernel-i686-PAEdebug.config
@@ -4414,6 +4414,7 @@ CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config
index f057b4074..62ae9c99f 100644
--- a/kernel-i686-debug.config
+++ b/kernel-i686-debug.config
@@ -4414,6 +4414,7 @@ CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-i686.config b/kernel-i686.config
index 5471b2b56..f68101008 100644
--- a/kernel-i686.config
+++ b/kernel-i686.config
@@ -4390,6 +4390,7 @@ CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-ppc64-debug.config b/kernel-ppc64-debug.config
index 08828ac6e..ef133f74f 100644
--- a/kernel-ppc64-debug.config
+++ b/kernel-ppc64-debug.config
@@ -4220,6 +4220,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-ppc64.config b/kernel-ppc64.config
index ff80d3adf..09a555f97 100644
--- a/kernel-ppc64.config
+++ b/kernel-ppc64.config
@@ -4194,6 +4194,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config
index e9659bfa0..bdd65239d 100644
--- a/kernel-ppc64le-debug.config
+++ b/kernel-ppc64le-debug.config
@@ -4158,6 +4158,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config
index e65ed3852..81fbfa2be 100644
--- a/kernel-ppc64le.config
+++ b/kernel-ppc64le.config
@@ -4132,6 +4132,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config
index c8c7d340b..cd831e499 100644
--- a/kernel-s390x-debug.config
+++ b/kernel-s390x-debug.config
@@ -4048,6 +4048,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
CONFIG_RAW_DRIVER=y
diff --git a/kernel-s390x.config b/kernel-s390x.config
index dff028c36..8f6023d7f 100644
--- a/kernel-s390x.config
+++ b/kernel-s390x.config
@@ -4022,6 +4022,7 @@ CONFIG_RADIO_WL1273=m
CONFIG_RADIO_ZOLTRIX=m
CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_RANDOM_TRUST_CPU=y
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
CONFIG_RAW_DRIVER=y
diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config
index 7b29c083b..acf81070e 100644
--- a/kernel-x86_64-debug.config
+++ b/kernel-x86_64-debug.config
@@ -4458,6 +4458,7 @@ CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MEMORY=y
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel-x86_64.config b/kernel-x86_64.config
index 12fd9c0f8..1850adf3e 100644
--- a/kernel-x86_64.config
+++ b/kernel-x86_64.config
@@ -4434,6 +4434,7 @@ CONFIG_RAID_ATTRS=m
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MEMORY=y
+CONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RAPIDIO is not set
CONFIG_RAS_CEC=y
# CONFIG_RAVE_SP_CORE is not set
diff --git a/kernel.spec b/kernel.spec
index 6d91f2fdf..0075c4bc0 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -627,6 +627,10 @@ Patch504: xsa270.patch
# rhbz 1627963 1628715
Patch505: HID-fixes.patch
+# rhbz 1572944
+Patch506: 0001-random-add-a-config-option-to-trust-the-CPU-s-hwrng.patch
+Patch507: 0001-random-make-CPU-trust-a-boot-parameter.patch
+
# END OF PATCH DEFINITIONS
%endif
@@ -1877,6 +1881,9 @@ fi
#
%changelog
* Thu Sep 13 2018 Laura Abbott <labbott@redhat.com>
+- Use the CPU RNG for entropy (rhbz 1572944)
+
+* Thu Sep 13 2018 Laura Abbott <labbott@redhat.com>
- HID fixes (rhbz 1627963 1628715)
* Mon Sep 10 2018 Laura Abbott <labbott@redhat.com> - 4.18.7-200