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

Previous thread: [PATCH] init: bzip2 or lzma -compressed kernels and initrds by Alain Knaff on Saturday, September 6, 2008 - 2:19 pm. (21 messages)

Next thread: none
From: H. Peter Anvin
Date: Saturday, September 6, 2008 - 3:08 pm

I think this is closer to what we really want; after all, memory being written is the "first principles" test that applies here.

-- 
Sent from my mobile phone (pardon any lack of formatting)


-----Original Message-----
From: Andrey Borzenkov <arvidjaar@newmail.ru>
Sent: Saturday, September 06, 2008 10:46
To: H. Peter Anvin <hpa@zytor.com>
Cc: Andrew Morton <akpm@linux-foundation.org>; Rafael J. Wysocki <rjw@sisk.pl>; Linux Kernel Mailing List <linux-kernel@vger.kernel.org>; Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH] Ghost EDD devices in /sys again


Hmm ... if install depends on having valid MBR, it will break right
now as well, because it will have duplicated signatures. So at least
something like following is needed.

diff --git a/arch/x86/boot/edd.c b/arch/x86/boot/edd.c
index d93cbc6..4c20d31 100644
--- a/arch/x86/boot/edd.c
+++ b/arch/x86/boot/edd.c
@@ -58,6 +58,7 @@ 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;


--

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


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--
From: H. Peter Anvin
Date: Sunday, September 28, 2008 - 8:12 am

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.

	-hpa

--

Previous thread: [PATCH] init: bzip2 or lzma -compressed kernels and initrds by Alain Knaff on Saturday, September 6, 2008 - 2:19 pm. (21 messages)

Next thread: none