From c8f917c5e74a6b2c6bac14426683a648dd964cc3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 10 Jul 2022 16:21:58 +0200 Subject: [PATCH] 4.14-stable patches added patches: powerpc-powernv-delay-rng-platform-device-creation-until-later-in-boot.patch --- ...-device-creation-until-later-in-boot.patch | 73 +++++++++++++++++++ queue-4.14/series | 1 + 2 files changed, 74 insertions(+) create mode 100644 queue-4.14/powerpc-powernv-delay-rng-platform-device-creation-until-later-in-boot.patch diff --git a/queue-4.14/powerpc-powernv-delay-rng-platform-device-creation-until-later-in-boot.patch b/queue-4.14/powerpc-powernv-delay-rng-platform-device-creation-until-later-in-boot.patch new file mode 100644 index 00000000000..d9c89cbf32d --- /dev/null +++ b/queue-4.14/powerpc-powernv-delay-rng-platform-device-creation-until-later-in-boot.patch @@ -0,0 +1,73 @@ +From 887502826549caa7e4215fd9e628f48f14c0825a Mon Sep 17 00:00:00 2001 +From: "Jason A. Donenfeld" +Date: Thu, 30 Jun 2022 14:16:54 +0200 +Subject: powerpc/powernv: delay rng platform device creation until later in boot + +From: Jason A. Donenfeld + +commit 887502826549caa7e4215fd9e628f48f14c0825a upstream. + +The platform device for the rng must be created much later in boot. +Otherwise it tries to connect to a parent that doesn't yet exist, +resulting in this splat: + + [ 0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called. + [ 0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable) + [ 0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00 + [ 0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80 + [ 0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0 + [ 0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4 + [ 0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214 + +This patch fixes the issue by doing the platform device creation inside +of machine_subsys_initcall. + +Fixes: f3eac426657d ("powerpc/powernv: wire up rng during setup_arch") +Cc: stable@vger.kernel.org +Reported-by: Sachin Sant +Signed-off-by: Jason A. Donenfeld +Tested-by: Sachin Sant +[mpe: Change "of node" to "platform device" in change log] +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/20220630121654.1939181-1-Jason@zx2c4.com +Signed-off-by: Greg Kroah-Hartman +--- + arch/powerpc/platforms/powernv/rng.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +--- a/arch/powerpc/platforms/powernv/rng.c ++++ b/arch/powerpc/platforms/powernv/rng.c +@@ -176,12 +176,8 @@ static int __init pnv_get_random_long_ea + NULL) != pnv_get_random_long_early) + return 0; + +- for_each_compatible_node(dn, NULL, "ibm,power-rng") { +- if (rng_create(dn)) +- continue; +- /* Create devices for hwrng driver */ +- of_platform_device_create(dn, NULL, NULL); +- } ++ for_each_compatible_node(dn, NULL, "ibm,power-rng") ++ rng_create(dn); + + if (!ppc_md.get_random_seed) + return 0; +@@ -205,10 +201,18 @@ void __init pnv_rng_init(void) + + static int __init pnv_rng_late_init(void) + { ++ struct device_node *dn; + unsigned long v; ++ + /* In case it wasn't called during init for some other reason. */ + if (ppc_md.get_random_seed == pnv_get_random_long_early) + pnv_get_random_long_early(&v); ++ ++ if (ppc_md.get_random_seed == powernv_get_random_long) { ++ for_each_compatible_node(dn, NULL, "ibm,power-rng") ++ of_platform_device_create(dn, NULL, NULL); ++ } ++ + return 0; + } + machine_subsys_initcall(powernv, pnv_rng_late_init); diff --git a/queue-4.14/series b/queue-4.14/series index 21c104c5214..23113d06822 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -7,3 +7,4 @@ net-rose-fix-uaf-bug-caused-by-rose_t0timer_expiry.patch iommu-vt-d-fix-pci-bus-rescan-device-hot-add.patch fbcon-disallow-setting-font-bigger-than-screen-size.patch video-of_display_timing.h-include-errno.h.patch +powerpc-powernv-delay-rng-platform-device-creation-until-later-in-boot.patch -- 2.47.3