Subject: Re: fsck problems
To: None <apana-lists-os-netbsd-general@apana.org.au>
From: Andrew Herbert <andrew@werple.apana.org.au>
List: current-users
Date: 07/28/1994 01:13:26
barrett@daisy.ee.und.ac.za (Alan Barrett) writes:
>I have been having trouble with fsck for several weeks now. My root
>partition is in a state that the current fsck is unable to fix, and I
...
>I tried running fsck under gdb, and at the point where the SIGSEGV
>occurs, gdb becomes unable to display a traceback, which leads me to
>suspect that the stack is getting clobbered.
I was having some fun with a segfaulting fsck a week ago. The stack was
being clobbered as you note above. I tracked down the bug for my particular
flavour of mangled filesystem to be in dirscan():
dirscan(idesc)
register struct inodesc *idesc;
{
...
char dbuf[DIRBLKSIZ];
...
for (dp = fsck_readdir(idesc); dp != NULL; dp = fsck_readdir(idesc)) {
dsize = dp->d_reclen;
bcopy((char *)dp, dbuf, (size_t)dsize);
As dsize is not being bounds checked, and particularly nasty mangling can
result in dsize > DIRBLKSIZE, there is a problem. Any comments on what the
correct return value or other action would be for this out-of-bounds
condition? return (SKIP), perhaps?
Andrew
------------------------------------------------------------------------------