From 6c91ca38b0a211150a967ee52c325c67fcba1341 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Sat, 15 Jul 2000 18:28:36 +0000 Subject: Make a tighter test for valid inode numbers in getnextinode(). --- sbin/fsck/inode.c | 5 +++-- sbin/fsck_ffs/inode.c | 5 +++-- sbin/fsck_ifs/inode.c | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'sbin') diff --git a/sbin/fsck/inode.c b/sbin/fsck/inode.c index e241cdbbfeb5..8b2f14b1644e 100644 --- a/sbin/fsck/inode.c +++ b/sbin/fsck/inode.c @@ -307,7 +307,7 @@ ginode(inumber) * Special purpose version of ginode used to optimize first pass * over all the inodes in numerical order. */ -ino_t nextino, lastinum; +ino_t nextino, lastinum, lastvalidinum; long readcnt, readpercg, fullcnt, inobufsize, partialcnt, partialsize; struct dinode *inodebuf; @@ -319,7 +319,7 @@ getnextinode(inumber) ufs_daddr_t dblk; static struct dinode *dp; - if (inumber != nextino++ || inumber > maxino) + if (inumber != nextino++ || inumber > lastvalidinum) errx(EEXIT, "bad inode number %d to nextinode", inumber); if (inumber >= lastinum) { readcnt++; @@ -348,6 +348,7 @@ setinodebuf(inum) if (inum % sblock.fs_ipg != 0) errx(EEXIT, "bad inode number %d to setinodebuf", inum); + lastvalidinum = inum + sblock.fs_ipg - 1; startinum = 0; nextino = inum; lastinum = inum; diff --git a/sbin/fsck_ffs/inode.c b/sbin/fsck_ffs/inode.c index e241cdbbfeb5..8b2f14b1644e 100644 --- a/sbin/fsck_ffs/inode.c +++ b/sbin/fsck_ffs/inode.c @@ -307,7 +307,7 @@ ginode(inumber) * Special purpose version of ginode used to optimize first pass * over all the inodes in numerical order. */ -ino_t nextino, lastinum; +ino_t nextino, lastinum, lastvalidinum; long readcnt, readpercg, fullcnt, inobufsize, partialcnt, partialsize; struct dinode *inodebuf; @@ -319,7 +319,7 @@ getnextinode(inumber) ufs_daddr_t dblk; static struct dinode *dp; - if (inumber != nextino++ || inumber > maxino) + if (inumber != nextino++ || inumber > lastvalidinum) errx(EEXIT, "bad inode number %d to nextinode", inumber); if (inumber >= lastinum) { readcnt++; @@ -348,6 +348,7 @@ setinodebuf(inum) if (inum % sblock.fs_ipg != 0) errx(EEXIT, "bad inode number %d to setinodebuf", inum); + lastvalidinum = inum + sblock.fs_ipg - 1; startinum = 0; nextino = inum; lastinum = inum; diff --git a/sbin/fsck_ifs/inode.c b/sbin/fsck_ifs/inode.c index e241cdbbfeb5..8b2f14b1644e 100644 --- a/sbin/fsck_ifs/inode.c +++ b/sbin/fsck_ifs/inode.c @@ -307,7 +307,7 @@ ginode(inumber) * Special purpose version of ginode used to optimize first pass * over all the inodes in numerical order. */ -ino_t nextino, lastinum; +ino_t nextino, lastinum, lastvalidinum; long readcnt, readpercg, fullcnt, inobufsize, partialcnt, partialsize; struct dinode *inodebuf; @@ -319,7 +319,7 @@ getnextinode(inumber) ufs_daddr_t dblk; static struct dinode *dp; - if (inumber != nextino++ || inumber > maxino) + if (inumber != nextino++ || inumber > lastvalidinum) errx(EEXIT, "bad inode number %d to nextinode", inumber); if (inumber >= lastinum) { readcnt++; @@ -348,6 +348,7 @@ setinodebuf(inum) if (inum % sblock.fs_ipg != 0) errx(EEXIT, "bad inode number %d to setinodebuf", inum); + lastvalidinum = inum + sblock.fs_ipg - 1; startinum = 0; nextino = inum; lastinum = inum; -- cgit v1.2.3