Date: Mon, 1 Dec 1997 09:13:17 +0100 (CET) From: Andre Albsmeier <andre.albsmeier@mchp.siemens.de> To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/5186: bug in diskslice_machdep.c (fix included) Message-ID: <199712010813.JAA05947@intern> Resent-Message-ID: <199712010820.AAA19011@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 5186
>Category: kern
>Synopsis: bug in diskslice_machdep.c (fix included)
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Dec 1 00:20:01 PST 1997
>Last-Modified:
>Originator: Andre Albsmeier
>Organization:
>Release: FreeBSD 2.2.5-STABLE i386
>Environment:
2.2.5-STABLE, but might be the others as well
>Description:
Either the code or the comment above it is wrong in sys/i386/isa/diskslice_machdep.c:
/*
* If ssector1 is on a cylinder >= 1024, then ssector can't be right.
* Allow the C/H/S for it to be 1023/ntracks-1/nsectors, or correct
* apart from the cylinder being reduced modulo 1024. Always allow
* 1023/255/63.
*/
if (ssector < ssector1
&& ((chs_ssect == nsectors && dp->dp_shd == ntracks - 1
&& chs_scyl == 1023)
|| (secpercyl != 0
&& (ssector1 - ssector) % (1024 * secpercyl) == 0))
|| (dp->dp_scyl == 255 && dp->dp_shd == 255
&& dp->dp_ssect == 255)) {
Since we can't enter 255 for the number of sectors, I think it's the code.
That would also match the numbers used by "disklabel -B"...
The same applies a few lines below for the end of the partition.
>How-To-Repeat:
Look at sys/i386/isa/diskslice_machdep.c :-)
>Fix:
--- diskslice_machdep.c.ORI Mon Dec 1 08:23:51 1997
+++ diskslice_machdep.c Mon Dec 1 08:57:27 1997
@@ -108,8 +108,8 @@
&& chs_scyl == 1023)
|| (secpercyl != 0
&& (ssector1 - ssector) % (1024 * secpercyl) == 0))
- || (dp->dp_scyl == 255 && dp->dp_shd == 255
- && dp->dp_ssect == 255)) {
+ || (dp->dp_scyl == 1023 && dp->dp_shd == 255
+ && dp->dp_ssect == 63)) {
TRACE(("%s: C/H/S start %d/%d/%d, start %lu: allow\n",
sname, chs_scyl, dp->dp_shd, chs_ssect, ssector1));
ssector = ssector1;
@@ -127,8 +127,8 @@
&& chs_ecyl == 1023)
|| (secpercyl != 0
&& (esector1 - esector) % (1024 * secpercyl) == 0))
- || (dp->dp_ecyl == 255 && dp->dp_ehd == 255
- && dp->dp_esect == 255)) {
+ || (dp->dp_ecyl == 1023 && dp->dp_ehd == 255
+ && dp->dp_esect == 63)) {
TRACE(("%s: C/H/S end %d/%d/%d, end %lu: allow\n",
sname, chs_ecyl, dp->dp_ehd, chs_esect, esector1));
esector = esector1;
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712010813.JAA05947>
