svn commit: r184264 - head/sys/geom/part

Marcel Moolenaar marcel at FreeBSD.org
Sat Oct 25 10:21:47 PDT 2008


Author: marcel
Date: Sat Oct 25 17:21:46 2008
New Revision: 184264
URL: http://svn.freebsd.org/changeset/base/184264

Log:
  Invalid BSD disklabels have been created by sysinstall and
  are possibly still being created. The d_secperunit field
  contains the number of sectors of the disk and not of the
  slice/partition to which the disklabel applies.
  Rather than reject the disklabel, we now silently adjust
  the field. Existing code, like bslabel(8), does not seem
  to check the label that extensively and seems to adjust
  fields as a side-effect as well.
  In other words, it's not that important apparently, so
  gpart should not be too strict about it.
  
  Reported by: nyan@
  Reported by: Andriy Gapon <avg at icyb.net.ua>

Modified:
  head/sys/geom/part/g_part_bsd.c

Modified: head/sys/geom/part/g_part_bsd.c
==============================================================================
--- head/sys/geom/part/g_part_bsd.c	Sat Oct 25 16:29:28 2008	(r184263)
+++ head/sys/geom/part/g_part_bsd.c	Sat Oct 25 17:21:46 2008	(r184264)
@@ -341,8 +341,13 @@ g_part_bsd_read(struct g_part_table *bas
 		printf("GEOM: %s: geometry does not match label.\n", pp->name);
 
 	chs = le32dec(buf + 60);
-	if (chs < 1 || chs > msize)
+	if (chs < 1)
 		goto invalid_label;
+	/* Fix-up a sysinstall bug. */
+	if (chs > msize) {
+		chs = msize;
+		le32enc(buf + 60, msize);
+	}
 	if (chs != msize)
 		printf("GEOM: %s: media size does not match label.\n",
 		    pp->name);


More information about the svn-src-all mailing list