diff options
author | Kirk McKusick <mckusick@FreeBSD.org> | 2000-07-15 18:28:36 +0000 |
---|---|---|
committer | Kirk McKusick <mckusick@FreeBSD.org> | 2000-07-15 18:28:36 +0000 |
commit | 6c91ca38b0a211150a967ee52c325c67fcba1341 (patch) | |
tree | 4f55a6bfcea71538b91d6a649cd75410418c759e /sbin | |
parent | 79d11e096070584b434f9d6d804b4ca1259fe01a (diff) | |
download | src-6c91ca38b0a211150a967ee52c325c67fcba1341.tar.gz src-6c91ca38b0a211150a967ee52c325c67fcba1341.zip |
Make a tighter test for valid inode numbers in getnextinode().
Notes
Notes:
svn path=/head/; revision=63231
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/fsck/inode.c | 5 | ||||
-rw-r--r-- | sbin/fsck_ffs/inode.c | 5 | ||||
-rw-r--r-- | sbin/fsck_ifs/inode.c | 5 |
3 files changed, 9 insertions, 6 deletions
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; |