From: Marty Connor Date: Thu, 18 Dec 2008 04:28:27 +0000 (-0500) Subject: [pcbios] Add additional sanity check for bogus e820 map X-Git-Tag: v0.9.7~92 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8674bc05a054fe8c0ef5ed4e6696d0f1168af74c;p=thirdparty%2Fipxe.git [pcbios] Add additional sanity check for bogus e820 map At POST time some BIOSes return invalid e820 maps even though they indicate that the data is valid. We add a check that the first region returned by e820 is RAM type and declare the map to be invalid if it is not. This extends the sanity checks from 8b20e5d ("[pcbios] Sanity-check the INT15,e820 and INT15,e801 memory maps"). --- diff --git a/src/arch/i386/firmware/pcbios/memmap.c b/src/arch/i386/firmware/pcbios/memmap.c index 3546dc6fe..ff387d93f 100644 --- a/src/arch/i386/firmware/pcbios/memmap.c +++ b/src/arch/i386/firmware/pcbios/memmap.c @@ -201,6 +201,13 @@ static int meme820 ( struct memory_map *memmap ) { break; } + /* If first region is not RAM, assume map is invalid */ + if ( ( memmap->count == 0 ) && + ( e820buf.type != E820_TYPE_RAM ) ) { + DBG ( "INT 15,e820 failed, first entry not RAM\n" ); + return -EINVAL; + } + DBG ( "INT 15,e820 region [%llx,%llx) type %d", e820buf.start, ( e820buf.start + e820buf.len ), ( int ) e820buf.type );