From 028e50e88381ac41692fb30181b338f5b071050a Mon Sep 17 00:00:00 2001 From: Kenneth R Westerback Date: Sat, 21 Oct 2006 20:10:40 +0000 Subject: 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@ --- sys/arch/alpha/alpha/disksubr.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) (limited to 'sys/arch/alpha') diff --git a/sys/arch/alpha/alpha/disksubr.c b/sys/arch/alpha/alpha/disksubr.c index ad25008c37f..d15e4613535 100644 --- a/sys/arch/alpha/alpha/disksubr.c +++ b/sys/arch/alpha/alpha/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.62 2006/10/21 16:01:53 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.63 2006/10/21 20:10:39 krw Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -222,7 +222,7 @@ readdoslabel(bp, strat, lp, osdep, partoffp, cylp, spoofonly) struct partition *pp; unsigned long extoff = 0; 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; @@ -307,25 +307,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; -- cgit v1.2.3