svn commit: r237688 - in user/ae/bootcode/sys/boot: common i386/pmbr
Andrey V. Elsukov
ae at FreeBSD.org
Thu Jun 28 06:58:13 UTC 2012
Author: ae
Date: Thu Jun 28 06:58:12 2012
New Revision: 237688
URL: http://svn.freebsd.org/changeset/base/237688
Log:
Don't try to detect GEOM's signature in the last sector.
This is the path to the Dark Side.
Discussed with: marcel
Modified:
user/ae/bootcode/sys/boot/common/part.c
user/ae/bootcode/sys/boot/i386/pmbr/pmbr.s
Modified: user/ae/bootcode/sys/boot/common/part.c
==============================================================================
--- user/ae/bootcode/sys/boot/common/part.c Thu Jun 28 06:49:04 2012 (r237687)
+++ user/ae/bootcode/sys/boot/common/part.c Thu Jun 28 06:58:12 2012 (r237688)
@@ -256,24 +256,12 @@ ptable_gptread(struct ptable *table, voi
}
}
offset = pri ? hdr.hdr_lba_alt: table->sectors - 1;
- while (offset > 0) {
- /* Read the backup GPT header. */
- if (dread(dev, buf, 1, offset) != 0) {
- phdr = NULL;
- break;
- }
+ /* Read the backup GPT header. */
+ if (dread(dev, buf, 1, offset) != 0)
+ phdr = NULL;
+ else
phdr = gpt_checkhdr((struct gpt_hdr *)buf, offset,
table->sectors, table->sectorsize);
- if (phdr != NULL)
- break;
- /*
- * Skip GEOM metadata and try to read backup
- * GPT header again.
- */
- if (memcmp(buf, GEOM_MAGIC, sizeof(GEOM_MAGIC) - 1) != 0)
- break;
- offset--;
- }
if (phdr != NULL) {
/*
* Compare primary and backup headers.
Modified: user/ae/bootcode/sys/boot/i386/pmbr/pmbr.s
==============================================================================
--- user/ae/bootcode/sys/boot/i386/pmbr/pmbr.s Thu Jun 28 06:49:04 2012 (r237687)
+++ user/ae/bootcode/sys/boot/i386/pmbr/pmbr.s Thu Jun 28 06:58:12 2012 (r237688)
@@ -44,7 +44,6 @@
.set GPT_SIG,0
.set GPT_SIG_0,0x20494645 # "EFI "
.set GPT_SIG_1,0x54524150 # "PART"
- .set GEOM_MAGIC,0x4d4f4547 # "GEOM"
.set GPT_MYLBA,24
.set GPT_PART_LBA,72
.set GPT_NPART,80
@@ -109,19 +108,13 @@ main.2a: movw $GPT_ADDR,%bx
jnz main.2b
jmp load_part
main.2b: cmpb $1,%dh # Reading primary?
- je main.3 # Try backup if yes
- cmpl $GEOM_MAGIC,GPT_ADDR # GEOM sig at backup location?
- jz main.3 # Skip GEOM metadata
- jmp err_pt # Invalid table found
+ jne err_pt # If no - invalid table found
#
# Try alternative LBAs from the last sector for the GPT header.
#
main.3: movb $0,%dh # %dh := 0 (reading backup)
movw $DPBUF+DPBUF_SEC,%si # %si = last sector + 1
movw $lba,%di # %di = $lba
- cmpl $0,(%si) #
- jnz main.3a #
- decl 0x4(%si) # 0x4(%si) = last sec (32-64)
main.3a: decl (%si) # 0x0(%si) = last sec (0-31)
movw $2,%cx
rep
More information about the svn-src-user
mailing list