summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Ellerman <mpe@ellerman.id.au>2014-08-28 18:40:47 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2014-09-25 23:14:50 +1000
commitad72a279a2b874828d1b5070ef01cf6ee6b1d62c (patch)
tree134686b3b28605c37ffa9cabbe9292747de981f4
parentd6a4f70909d279004a2b3d539e240e07b1ecc1cb (diff)
downloadlinux-stable-ad72a279a2b874828d1b5070ef01cf6ee6b1d62c.tar.gz
linux-stable-ad72a279a2b874828d1b5070ef01cf6ee6b1d62c.tar.bz2
linux-stable-ad72a279a2b874828d1b5070ef01cf6ee6b1d62c.zip
powerpc: Check flat device tree version at boot
In commit e6a6928c3ea1 "of/fdt: Convert FDT functions to use libfdt", the kernel stopped supporting old flat device tree formats. The minimum supported version is now 0x10. There was a checking function added, early_init_dt_verify(), but it's not called on powerpc. The result is, if you boot with an old flat device tree, the kernel will fail to parse it correctly, think you have no memory etc. and hilarity ensues. We can't really fix it, but we can at least catch the fact that the device tree is in an unsupported format and panic(). We can't call BUG(), it's too early. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/kernel/prom.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index cb35c5b3efca..59576255d22b 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -642,6 +642,10 @@ void __init early_init_devtree(void *params)
DBG(" -> early_init_devtree(%p)\n", params);
+ /* Too early to BUG_ON(), do it by hand */
+ if (!early_init_dt_verify(params))
+ panic("BUG: Failed verifying flat device tree, bad version?");
+
/* Setup flat device-tree pointer */
initial_boot_params = params;