public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: + x86-fix-ghost-entries-under-sys-firmware-edd.patch added to -mm tree
       [not found] <200810030634.m936YVDC014640@imap1.linux-foundation.org>
@ 2008-10-03 17:08 ` Andrey Borzenkov
  2008-10-03 17:15   ` H. Peter Anvin
  0 siblings, 1 reply; 2+ messages in thread
From: Andrey Borzenkov @ 2008-10-03 17:08 UTC (permalink / raw)
  To: akpm; +Cc: Linux Kernel Mailing List, Matt_Domsch, hpa, mingo, tglx


[-- Attachment #1.1: Type: text/plain, Size: 645 bytes --]

On Friday 03 October 2008, akpm@linux-foundation.org wrote:
> hpa:
> 
>    Right, I think that's a much better patch.
> 
>    The really Right Thing[TM] to do is probably to pre-clear the buffer
>    and then look for the 0xaa55 signature at offset 510; it is required
>    for sector 0 to be a valid MBR-format partition table and hence for the
>    MBR *signature* to be valid.
> 
>    I'll write that up tomorrow (I'm travelling today), or you can send
>    me a patch.
> 
> akpm:
> 
>    A patch in hand is worth...

I am really sorry; I botched this initially and then was distracted by other
things. The patch attached.

[-- Attachment #1.2: fix-edd-detection-v2 --]
[-- Type: text/x-diff, Size: 1518 bytes --]

Subject: [PATCH] Fix ghost entries under /sys/firmware/edd take 3
From: Andrey Borzenkov < arvidjaar@mail.ru>

Some BIOSes do not indicate error when trying to read from non-
existing device. Zero buffer before reading and check that we
possibly have valid MBR by looking for MBR magic.

This was fixed in different way for edd.S in
http://marc.info/?l=linux-kernel&m=114087765422490&w=2, but lost
again when edd.S was rewritten in C.

Signed-off-by: Andrey Borzenkov < arvidjaar@mail.ru>

---

 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 d93cbc6..1aae8f3 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)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: + x86-fix-ghost-entries-under-sys-firmware-edd.patch added to -mm tree
  2008-10-03 17:08 ` + x86-fix-ghost-entries-under-sys-firmware-edd.patch added to -mm tree Andrey Borzenkov
@ 2008-10-03 17:15   ` H. Peter Anvin
  0 siblings, 0 replies; 2+ messages in thread
From: H. Peter Anvin @ 2008-10-03 17:15 UTC (permalink / raw)
  To: Andrey Borzenkov
  Cc: akpm, Linux Kernel Mailing List, Matt_Domsch, mingo, tglx

Andrey Borzenkov wrote:
> 
> I am really sorry; I botched this initially and then was distracted by other
> things. The patch attached.
> 

Applied to tip:x86/setup, thanks!

	-hpa

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-10-03 17:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <200810030634.m936YVDC014640@imap1.linux-foundation.org>
2008-10-03 17:08 ` + x86-fix-ghost-entries-under-sys-firmware-edd.patch added to -mm tree Andrey Borzenkov
2008-10-03 17:15   ` H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox