x86: Make sure we can boot in the case the BDA contains pure garbage
authorH. Peter Anvin <hpa@linux.intel.com>
Wed, 27 Feb 2013 20:46:40 +0000 (12:46 -0800)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 6 Mar 2013 03:24:14 +0000 (03:24 +0000)
commitc2581d3df8552f9237245f85338f767c5a22660f
treef0eaad5b5939ccf0e6ec6f27366eba8970a7854b
parentd7763498ca68b50980381ce62187b86dcfdd0ba4
x86: Make sure we can boot in the case the BDA contains pure garbage

commit 7c10093692ed2e6f318387d96b829320aa0ca64c upstream.

On non-BIOS platforms it is possible that the BIOS data area contains
garbage instead of being zeroed or something equivalent (firmware
people: we are talking of 1.5K here, so please do the sane thing.)

We need on the order of 20-30K of low memory in order to boot, which
may grow up to < 64K in the future.  We probably want to avoid the
lowest of the low memory.  At the same time, it seems extremely
unlikely that a legitimate EBDA would ever reach down to the 128K
(which would require it to be over half a megabyte in size.)  Thus,
pick 128K as the cutoff for "this is insane, ignore."  We may still
end up reserving a bunch of extra memory on the low megabyte, but that
is not really a major issue these days.  In the worst case we lose
512K of RAM.

This code really should be merged with trim_bios_range() in
arch/x86/kernel/setup.c, but that is a bigger patch for a later merge
window.

Reported-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: Matt Fleming <matt.fleming@intel.com>
Link: http://lkml.kernel.org/n/tip-oebml055yyfm8yxmria09rja@git.kernel.org
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/x86/kernel/head.c