summaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ifs
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1998-01-19 16:28:29 +0000
committerbde <bde@FreeBSD.org>1998-01-19 16:28:29 +0000
commitac4b63f1338312c9c6046da53037e2cebd7fd8e4 (patch)
tree6fa72420122745d2159754098adc5ad1f76d510f /sbin/fsck_ifs
parent1b72307204011e93eacc0e8dd59cb6e3cfc867a8 (diff)
downloadFreeBSD-src-ac4b63f1338312c9c6046da53037e2cebd7fd8e4.zip
FreeBSD-src-ac4b63f1338312c9c6046da53037e2cebd7fd8e4.tar.gz
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
Diffstat (limited to 'sbin/fsck_ifs')
-rw-r--r--sbin/fsck_ifs/setup.c5
1 files changed, 5 insertions, 0 deletions
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;
OpenPOWER on IntegriCloud