summaryrefslogtreecommitdiffstats
path: root/sys/boot/i386
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2014-11-29 18:44:52 +0000
committerdim <dim@FreeBSD.org>2014-11-29 18:44:52 +0000
commit409c2db38ee329b80114866313cc0b55476e2f28 (patch)
tree304c3b270d824fbfd3b260b7805d280c6720d066 /sys/boot/i386
parent931d83884d23b59f424e4fc8578c2a13c8155d3a (diff)
parentd737995628df5a4f316eee2f864017a1075f9f87 (diff)
downloadFreeBSD-src-409c2db38ee329b80114866313cc0b55476e2f28.zip
FreeBSD-src-409c2db38ee329b80114866313cc0b55476e2f28.tar.gz
Merge ^/head r274961 through r275261.
Diffstat (limited to 'sys/boot/i386')
-rw-r--r--sys/boot/i386/boot2/boot2.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/boot/i386/boot2/boot2.c b/sys/boot/i386/boot2/boot2.c
index 4e1a835..001126f 100644
--- a/sys/boot/i386/boot2/boot2.c
+++ b/sys/boot/i386/boot2/boot2.c
@@ -501,6 +501,7 @@ dskread(void *buf, unsigned lba, unsigned nblk)
char *sec;
unsigned i;
uint8_t sl;
+ const char *reason;
if (!dsk_meta) {
sec = dmadat->secbuf;
@@ -525,8 +526,8 @@ dskread(void *buf, unsigned lba, unsigned nblk)
if (sl != COMPATIBILITY_SLICE)
dp += sl - BASE_SLICE;
if (dp->dp_typ != DOSPTYP_386BSD) {
- printf("Invalid %s\n", "slice");
- return -1;
+ reason = "slice";
+ goto error;
}
dsk.start = dp->dp_start;
}
@@ -535,8 +536,8 @@ dskread(void *buf, unsigned lba, unsigned nblk)
d = (void *)(sec + LABELOFFSET);
if (d->d_magic != DISKMAGIC || d->d_magic2 != DISKMAGIC) {
if (dsk.part != RAW_PART) {
- printf("Invalid %s\n", "label");
- return -1;
+ reason = "label";
+ goto error;
}
} else {
if (!dsk.init) {
@@ -546,14 +547,17 @@ dskread(void *buf, unsigned lba, unsigned nblk)
}
if (dsk.part >= d->d_npartitions ||
!d->d_partitions[dsk.part].p_size) {
- printf("Invalid %s\n", "partition");
- return -1;
+ reason = "partition";
+ goto error;
}
dsk.start += d->d_partitions[dsk.part].p_offset;
dsk.start -= d->d_partitions[RAW_PART].p_offset;
}
}
return drvread(buf, dsk.start + lba, nblk);
+error:
+ printf("Invalid %s\n", reason);
+ return -1;
}
static void
OpenPOWER on IntegriCloud