diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-06-11 00:43:21 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-06-11 00:43:21 +0100 |
commit | 8f4b8c7613928d5c6da43715fedc00a7b1ee53be (patch) | |
tree | 10ea6f43945712e725268f2b025d56e6005b4808 | |
parent | 099b4d3b473db012a55ce6bec9ef594d0508e782 (diff) | |
download | op-kernel-dev-8f4b8c7613928d5c6da43715fedc00a7b1ee53be.zip op-kernel-dev-8f4b8c7613928d5c6da43715fedc00a7b1ee53be.tar.gz |
ARM: initrd: disable initrds outside of memory
We can't cope with initrds outside of memory, so check that the
initrd is within some declared memory to the kernel before using
it. Otherwise we're likely to OOPS during boot.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/mm/init.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index b2cf946..c19571c 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -331,6 +331,12 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc) #endif #ifdef CONFIG_BLK_DEV_INITRD if (phys_initrd_size && + !memblock_is_region_memory(phys_initrd_start, phys_initrd_size)) { + pr_err("INITRD: 0x%08lx+0x%08lx is not a memory region - disabling initrd\n", + phys_initrd_start, phys_initrd_size); + phys_initrd_start = phys_initrd_size = 0; + } + if (phys_initrd_size && memblock_is_region_reserved(phys_initrd_start, phys_initrd_size)) { pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region - disabling initrd\n", phys_initrd_start, phys_initrd_size); |