From ac4b63f1338312c9c6046da53037e2cebd7fd8e4 Mon Sep 17 00:00:00 2001 From: bde Date: Mon, 19 Jan 1998 16:28:29 +0000 Subject: Guard against a block size of 0 in the label. When the first superblock is invalid, fsck looks at the label to help guess where the next superblock should be. If the partition type is 4.2BSD, fsck assumed that the block size was valid and divided by it, so it dumped core if the size was 0. Initialization of the label was broken almost 3 years ago in rev.1.9 of newfs/newfs.c. Newfs does not change the label at all, so there is no problem (except the breakage of the automatic search for backup superblocks) unless something else sets the partition type to 4.2BSD. However, it is too easy to set partition types to 4.2.BSD by copying an old label or by using a disktab entry to create the label. PR: 2537 --- sbin/fsck_ifs/setup.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'sbin/fsck_ifs') diff --git a/sbin/fsck_ifs/setup.c b/sbin/fsck_ifs/setup.c index bec9a31..197d9cc 100644 --- a/sbin/fsck_ifs/setup.c +++ b/sbin/fsck_ifs/setup.c @@ -461,6 +461,11 @@ calcsb(dev, devfd, fs) fstypenames[pp->p_fstype] : "unknown"); return (0); } + if (pp->p_fsize == 0 || pp->p_frag == 0) { + pfatal("%s: LABELED AS A %s FILE SYSTEM, BUT BLOCK SIZE IS 0\n", + dev, fstypenames[pp->p_fstype]); + return (0); + } memset(fs, 0, sizeof(struct fs)); fs->fs_fsize = pp->p_fsize; fs->fs_frag = pp->p_frag; -- cgit v1.1