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

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Andrey Borzenkov
Date: Saturday, September 27, 2008 - 11:34 pm

--Boundary-01=_UWy3IhuNYHpFHUe
Content-Type: text/plain;
  charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Sunday 07 September 2008, H. Peter Anvin wrote:
itten 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.

--Boundary-01=_UWy3IhuNYHpFHUe
Content-Type: text/x-diff;
  charset="utf-8";
  name="fix-edd-detection-v2"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline;
	filename="fix-edd-detection-v2"

Subject: [PATCH] Fix ghost entries under /sys/firmware/edd take 2
=46rom: 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
actually got some data.

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

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

=2D--

 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
=2D-- 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;
=20
+	memset(mbrbuf_ptr, 0, sector_size);
 	if (read_mbr(devno, mbrbuf_ptr))
 		return -1;
=20
 	*mbrsig =3D *(u32 *)&mbrbuf_ptr[EDD_MBR_SIG_OFFSET];
=2D	return 0;
+	return -!*mbrsig;	/* treat zero signature as no sig */
 }
=20
 static int get_edd_info(u8 devno, struct edd_info *ei)

--Boundary-01=_UWy3IhuNYHpFHUe--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
RE: [PATCH] Ghost EDD devices in /sys again, H. Peter Anvin, (Sat Sep 6, 3:08 pm)
Re: [PATCH] Ghost EDD devices in /sys again, Andrey Borzenkov, (Sat Sep 27, 11:34 pm)
Re: [PATCH] Ghost EDD devices in /sys again, H. Peter Anvin, (Sun Sep 28, 8:12 am)