diff options
author | Kenneth R Westerback <krw@cvs.openbsd.org> | 2006-10-21 20:10:40 +0000 |
---|---|---|
committer | Kenneth R Westerback <krw@cvs.openbsd.org> | 2006-10-21 20:10:40 +0000 |
commit | 028e50e88381ac41692fb30181b338f5b071050a (patch) | |
tree | 491f1da9c6fa9edfe3c7fb72f0ff3bf9df7d0823 /sys/arch/amd64 | |
parent | 414b81d3b17102a765dc8117c456a89585a74d53 (diff) |
Don't try to spoof 0 length DOS MBR/EBR partitions. By skipping
partitions with 0 in the length field we don't need to test for
and skip partitions that are all zeros. Eliminating that code
allows elimination of a local pointer.
"0 length partitions are definately dead" deraadt@
Diffstat (limited to 'sys/arch/amd64')
-rw-r--r-- | sys/arch/amd64/amd64/disksubr.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/sys/arch/amd64/amd64/disksubr.c b/sys/arch/amd64/amd64/disksubr.c index ec839393506..dbc07be3e80 100644 --- a/sys/arch/amd64/amd64/disksubr.c +++ b/sys/arch/amd64/amd64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.23 2006/10/21 16:01:53 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.24 2006/10/21 20:10:39 krw Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -73,7 +73,7 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) unsigned long extoff = 0; struct buf *bp = NULL; daddr_t part_blkno = DOSBBSECTOR; - char *msg = NULL, *cp; + char *msg = NULL; int dospartoff, cyl, i, ourpart = -1; int wander = 1, n = 0, loop = 0; @@ -166,25 +166,16 @@ donot: continue; if (letoh32(dp2->dp_size) > lp->d_secperunit) continue; - if (letoh32(dp2->dp_size)) - pp->p_size = letoh32(dp2->dp_size); + if (letoh32(dp2->dp_size) == 0) + continue; if (letoh32(dp2->dp_start)) pp->p_offset = letoh32(dp2->dp_start) + part_blkno; + pp->p_size = letoh32(dp2->dp_size); + switch (dp2->dp_typ) { case DOSPTYP_UNUSED: - for (cp = (char *)dp2; - cp < (char *)(dp2 + 1); cp++) - if (*cp) - break; - /* - * Was it all zeroes? If so, it is - * an unused entry that we don't - * want to show. - */ - if (cp == (char *)(dp2 + 1)) - continue; pp->p_fstype = FS_UNUSED; n++; break; |