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@icyb.net.ua>
This commit is contained in:
Marcel Moolenaar 2008-10-25 17:21:46 +00:00
parent bee8d4f213
commit 38a2db2eb0
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=184264

View File

@ -341,8 +341,13 @@ g_part_bsd_read(struct g_part_table *basetable, struct g_consumer *cp)
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);