diff options
author | mckusick <mckusick@FreeBSD.org> | 2000-07-12 06:19:22 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2000-07-12 06:19:22 +0000 |
commit | 64fa5028905150a5b3932025b8ab4f1e1e9420c4 (patch) | |
tree | 77954f8db3cdefef1bc4794bd3a52f2a81561027 /sbin/fsck_ffs | |
parent | 3b0629faf732df6cf8dd2a9f9f7e5125f988e278 (diff) | |
download | FreeBSD-src-64fa5028905150a5b3932025b8ab4f1e1e9420c4.zip FreeBSD-src-64fa5028905150a5b3932025b8ab4f1e1e9420c4.tar.gz |
Ensure that block and character devices as well as fifo's and sockets
all have zero length. A non-zero length panic's the kernel when one
of these is deleted.
PR: 19426
Submitted by: Ian Dowse <iedowse@maths.tcd.ie>
Reviewed by: dwmalone@FreeBSD.org
Diffstat (limited to 'sbin/fsck_ffs')
-rw-r--r-- | sbin/fsck_ffs/pass1.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sbin/fsck_ffs/pass1.c b/sbin/fsck_ffs/pass1.c index 59826a7..fcd596b 100644 --- a/sbin/fsck_ffs/pass1.c +++ b/sbin/fsck_ffs/pass1.c @@ -209,6 +209,12 @@ checkinode(inumber, idesc) dp->di_mode = IFREG|0600; inodirty(); } + if ((mode == IFBLK || mode == IFCHR || mode == IFIFO || + mode == IFSOCK) && dp->di_size != 0) { + if (debug) + printf("bad special-file size %qu:", dp->di_size); + goto unknown; + } ndb = howmany(dp->di_size, sblock.fs_bsize); if (ndb < 0) { if (debug) |