From 7932349eff5a3dd7ab86d0c8ea1c59816f37e2b7 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Wed, 12 Jul 2000 06:19:22 +0000 Subject: [PATCH] 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 Reviewed by: dwmalone@FreeBSD.org --- sbin/fsck/pass1.c | 6 ++++++ sbin/fsck_ffs/pass1.c | 6 ++++++ sbin/fsck_ifs/pass1.c | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/sbin/fsck/pass1.c b/sbin/fsck/pass1.c index 59826a7e2fc..fcd596b9cc2 100644 --- a/sbin/fsck/pass1.c +++ b/sbin/fsck/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) diff --git a/sbin/fsck_ffs/pass1.c b/sbin/fsck_ffs/pass1.c index 59826a7e2fc..fcd596b9cc2 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) diff --git a/sbin/fsck_ifs/pass1.c b/sbin/fsck_ifs/pass1.c index 59826a7e2fc..fcd596b9cc2 100644 --- a/sbin/fsck_ifs/pass1.c +++ b/sbin/fsck_ifs/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)