Date: Wed, 7 May 97 11:56:33 +0100 From: iedowse@maths.tcd.ie To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: bin/3528: fsck fails to detect some illegal block numbers Message-ID: <9705071156.aa11366@salmon.maths.tcd.ie> Resent-Message-ID: <199705071110.EAA17012@hub.freebsd.org>
index | next in thread | raw e-mail
>Number: 3528
>Category: bin
>Synopsis: fsck fails to detect some illegal block numbers
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed May 7 04:10:01 PDT 1997
>Last-Modified:
>Originator: Ian Dowse
>Organization:
>Release: FreeBSD 2.2-STABLE i386
>Environment:
FreeBSD 2.2-STABLE i386
>Description:
fsck fails to detect some illegal block numbers due to an overflow in
chkrange(). A block number of -1 results in the error:
CANNOT SEEK: BLK -1
chkrange(blk,cnt) only checks that (blk+cnt) is within range. This is
not sufficient if the addition causes a wrap-around to the start of the
partition.
>How-To-Repeat:
Create an inode which has -1 as one of its block numbers, and run fsck
on the partition.
>Fix:
--- src/sbin/fsck/inode.c.old Wed May 7 10:05:13 1997
+++ src/sbin/fsck/inode.c Wed May 7 10:51:36 1997
@@ -234,7 +234,7 @@
{
register int c;
- if ((unsigned)(blk + cnt) > maxfsblock)
+ if ((unsigned)blk > maxfsblock || (unsigned)(blk + cnt) > maxfsblock)
return (1);
c = dtog(&sblock, blk);
if (blk < cgdmin(&sblock, c)) {
>Audit-Trail:
>Unformatted:
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9705071156.aa11366>
