disklabel_sun_to_bsd() will nicely set the disk size if it is zero, but it is
authormiod <miod@openbsd.org>
Fri, 16 Jan 2015 20:17:05 +0000 (20:17 +0000)
committermiod <miod@openbsd.org>
Fri, 16 Jan 2015 20:17:05 +0000 (20:17 +0000)
usually invoked after initdisklabel() which proactively changes a zero disk
size to MAXDISKSIZE, causing this test to fail.

Allow for MAXDISKSIZE too in that test. This makes spoofed disklabels of SMD
disks have a proper `c' slice size.

luna88k disklabel_om_to_bsd() is modified accordingly, to keep diffability,
even though luna88k can't - to the best of my knowledge - sport SMD disk
controllers.

ok deraadt@ krw@

sys/arch/luna88k/luna88k/disksubr.c
sys/arch/sparc/sparc/disksubr.c
sys/arch/sparc64/sparc64/disksubr.c

index ed83d8a..8a733e5 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: disksubr.c,v 1.56 2013/10/20 10:11:16 krw Exp $ */
+/* $OpenBSD: disksubr.c,v 1.57 2015/01/16 20:17:05 miod Exp $ */
 /* $NetBSD: disksubr.c,v 1.12 2002/02/19 17:09:44 wiz Exp $ */
 
 /*
@@ -274,7 +274,8 @@ disklabel_om_to_bsd(struct sun_disklabel *sl, struct disklabel *lp)
 
        secpercyl = sl->sl_nsectors * sl->sl_ntracks;
        lp->d_secpercyl = secpercyl;
-       if (DL_GETDSIZE(lp) == 0)
+       /* If unset or initialized as full disk, permit refinement */
+       if (DL_GETDSIZE(lp) == 0 || DL_GETDSIZE(lp) == MAXDISKSIZE)
                DL_SETDSIZE(lp, (u_int64_t)secpercyl * sl->sl_ncylinders);
        lp->d_version = 1;
 
index 05f1cea..0b83451 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: disksubr.c,v 1.92 2013/10/20 10:11:16 krw Exp $       */
+/*     $OpenBSD: disksubr.c,v 1.93 2015/01/16 20:17:05 miod Exp $      */
 /*     $NetBSD: disksubr.c,v 1.16 1996/04/28 20:25:59 thorpej Exp $ */
 
 /*
@@ -262,7 +262,8 @@ disklabel_sun_to_bsd(struct sun_disklabel *sl, struct disklabel *lp)
 
        secpercyl = sl->sl_nsectors * sl->sl_ntracks;
        lp->d_secpercyl = secpercyl;
-       if (DL_GETDSIZE(lp) == 0)
+       /* If unset or initialized as full disk, permit refinement */
+       if (DL_GETDSIZE(lp) == 0 || DL_GETDSIZE(lp) == MAXDISKSIZE)
                DL_SETDSIZE(lp, (u_int64_t)secpercyl * sl->sl_ncylinders);
        lp->d_version = 1;
 
index 47828bd..23398a0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: disksubr.c,v 1.68 2013/10/20 10:11:17 krw Exp $       */
+/*     $OpenBSD: disksubr.c,v 1.69 2015/01/16 20:17:06 miod Exp $      */
 /*     $NetBSD: disksubr.c,v 1.13 2000/12/17 22:39:18 pk Exp $ */
 
 /*
@@ -252,7 +252,8 @@ disklabel_sun_to_bsd(struct sun_disklabel *sl, struct disklabel *lp)
 
        secpercyl = sl->sl_nsectors * sl->sl_ntracks;
        lp->d_secpercyl = secpercyl;
-       if (DL_GETDSIZE(lp) == 0)
+       /* If unset or initialized as full disk, permit refinement */
+       if (DL_GETDSIZE(lp) == 0 || DL_GETDSIZE(lp) == MAXDISKSIZE)
                DL_SETDSIZE(lp, (u_int64_t)secpercyl * sl->sl_ncylinders);
        lp->d_version = 1;