diff options
Diffstat (limited to 'arch/x86/boot/edd.c')
| -rw-r--r-- | arch/x86/boot/edd.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/boot/edd.c b/arch/x86/boot/edd.c index d93cbc6464d..1aae8f3e5ca 100644 --- a/arch/x86/boot/edd.c +++ b/arch/x86/boot/edd.c @@ -41,6 +41,7 @@ static u32 read_mbr_sig(u8 devno, struct edd_info *ei, u32 *mbrsig)  	char *mbrbuf_ptr, *mbrbuf_end;  	u32 buf_base, mbr_base;  	extern char _end[]; +	u16 mbr_magic;  	sector_size = ei->params.bytes_per_sector;  	if (!sector_size) @@ -58,11 +59,15 @@ static u32 read_mbr_sig(u8 devno, struct edd_info *ei, u32 *mbrsig)  	if (mbrbuf_end > (char *)(size_t)boot_params.hdr.heap_end_ptr)  		return -1; +	memset(mbrbuf_ptr, 0, sector_size);  	if (read_mbr(devno, mbrbuf_ptr))  		return -1;  	*mbrsig = *(u32 *)&mbrbuf_ptr[EDD_MBR_SIG_OFFSET]; -	return 0; +	mbr_magic = *(u16 *)&mbrbuf_ptr[510]; + +	/* check for valid MBR magic */ +	return mbr_magic == 0xAA55 ? 0 : -1;  }  static int get_edd_info(u8 devno, struct edd_info *ei)  | 
