Re: [PATCH] Ghost EDD devices in /sys again

From: Andrey Borzenkov
Date: Sun Sep 28 2008 - 02:35:56 EST


On Sunday 07 September 2008, H. Peter Anvin wrote:
>
> I think this is closer to what we really want; after all, memory being written is the "first principles" test that applies here.
>

OK I have been using this for some time. I do not actually insist on
returning "failure" for zero signature; my main concern was duplicated
signature resulted from not clearing read buffer. Still I assume that
zero signature is the same as no signature; i.e. even if disk is physically
present but zeroed out there is no point in presenting mbr_signature in
sysfs either.
Subject: [PATCH] Fix ghost entries under /sys/firmware/edd take 2
From: Andrey Borzenkov < arvidjaar@xxxxxxx>

Some BIOSes do not indicate error when trying to read from non-
existing device. Zero buffer before reading and check that we
actually got some data.

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@xxxxxxx>

---

arch/x86/boot/edd.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)


diff --git a/arch/x86/boot/edd.c b/arch/x86/boot/edd.c
index d93cbc6..0388234 100644
--- a/arch/x86/boot/edd.c
+++ b/arch/x86/boot/edd.c
@@ -58,11 +58,12 @@ 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;
+ return -!*mbrsig; /* treat zero signature as no sig */
}

static int get_edd_info(u8 devno, struct edd_info *ei)

Attachment: signature.asc
Description: This is a digitally signed message part.