Module Name: src Committed By: martin Date: Sat May 13 11:54:17 UTC 2023
Modified Files: src/sbin/fsck_ffs [netbsd-10]: pass5.c setup.c Log Message: Pull up following revision(s) (requested by chs in ticket #161): sbin/fsck_ffs/setup.c: revision 1.106 sbin/fsck_ffs/pass5.c: revision 1.57 ufs: more signed/unsigned fixes Fix the previous signed/unsigned fixes to build on 32-bit, including applying this commit from FreeBSD: commit 2d34afcd04207cf3fa3d5b7f467a890eae75da41 Author: Kirk McKusick <mckus...@freebsd.org> Date: Sun Oct 25 21:04:07 2020 +0000 Use proper type (ino_t) for inode numbers to avoid improper sign extention in the Pass 5 checks. The manifestation was fsck_ffs exiting with this error: ** Phase 5 - Check Cyl groups fsck_ffs: inoinfo: inumber 18446744071562087424 out of range The error only manifests itself for filesystems bigger than about 100Tb. Reported by: Nikita Grechikhin <ngrechikhin at yandex.ru> MFC after: 2 weeks Sponsored by: Netflix To generate a diff of this commit: cvs rdiff -u -r1.55.2.1 -r1.55.2.2 src/sbin/fsck_ffs/pass5.c cvs rdiff -u -r1.104.2.1 -r1.104.2.2 src/sbin/fsck_ffs/setup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/fsck_ffs/pass5.c diff -u src/sbin/fsck_ffs/pass5.c:1.55.2.1 src/sbin/fsck_ffs/pass5.c:1.55.2.2 --- src/sbin/fsck_ffs/pass5.c:1.55.2.1 Sat May 13 11:51:14 2023 +++ src/sbin/fsck_ffs/pass5.c Sat May 13 11:54:17 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pass5.c,v 1.55.2.1 2023/05/13 11:51:14 martin Exp $ */ +/* $NetBSD: pass5.c,v 1.55.2.2 2023/05/13 11:54:17 martin Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)pass5.c 8.9 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: pass5.c,v 1.55.2.1 2023/05/13 11:51:14 martin Exp $"); +__RCSID("$NetBSD: pass5.c,v 1.55.2.2 2023/05/13 11:54:17 martin Exp $"); #endif #endif /* not lint */ @@ -60,12 +60,15 @@ void pass5(void) { int blk, frags, basesize, sumsize, mapsize, cssize; - int inomapsize, blkmapsize; + uint32_t inomapsize, blkmapsize; uint32_t c; struct fs *fs = sblock; daddr_t dbase, dmax; daddr_t d; - long i, j, k; + uint32_t i; + int32_t j; + int k; + ino_t inum; struct csum *cs; struct csum_total cstotal; struct inodesc idesc[4]; @@ -317,9 +320,9 @@ pass5(void) if (!is_ufs2 && ((fs->fs_old_flags & FS_FLAGS_UPDATED) == 0) && fs->fs_old_postblformat == FS_42POSTBLFMT) ocg->cg_magic = CG_MAGIC; - j = fs->fs_ipg * c; - for (i = 0; i < fs->fs_ipg; j++, i++) { - info = inoinfo(j); + inum = fs->fs_ipg * c; + for (i = 0; i < fs->fs_ipg; inum++, i++) { + info = inoinfo(inum); switch (info->ino_state) { case USTATE: @@ -338,14 +341,14 @@ pass5(void) break; default: - if ((ino_t)j < UFS_ROOTINO) + if (inum < UFS_ROOTINO) break; - errexit("BAD STATE %d FOR INODE I=%ld", - info->ino_state, (long)j); + errexit("BAD STATE %d FOR INODE I=%ju", + info->ino_state, (uintmax_t)inum); } } if (c == 0) - for (i = 0; i < (long)UFS_ROOTINO; i++) { + for (i = 0; i < UFS_ROOTINO; i++) { setbit(cg_inosused(newcg, 0), i); newcg->cg_cs.cs_nifree--; } @@ -450,7 +453,7 @@ pass5(void) continue; if (cg_inosused(cg, 0)[i] & (1 << k)) continue; - pwarn("ALLOCATED INODE %ld " + pwarn("ALLOCATED INODE %u " "MARKED FREE\n", c * fs->fs_ipg + i * 8 + k); } @@ -464,7 +467,7 @@ pass5(void) continue; if (cg_inosused(cg, 0)[i] & (1 << k)) continue; - pwarn("ALLOCATED FRAG %ld " + pwarn("ALLOCATED FRAG %u " "MARKED FREE\n", c * fs->fs_fpg + i * 8 + k); } Index: src/sbin/fsck_ffs/setup.c diff -u src/sbin/fsck_ffs/setup.c:1.104.2.1 src/sbin/fsck_ffs/setup.c:1.104.2.2 --- src/sbin/fsck_ffs/setup.c:1.104.2.1 Sat May 13 11:51:14 2023 +++ src/sbin/fsck_ffs/setup.c Sat May 13 11:54:17 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: setup.c,v 1.104.2.1 2023/05/13 11:51:14 martin Exp $ */ +/* $NetBSD: setup.c,v 1.104.2.2 2023/05/13 11:54:17 martin Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)setup.c 8.10 (Berkeley) 5/9/95"; #else -__RCSID("$NetBSD: setup.c,v 1.104.2.1 2023/05/13 11:51:14 martin Exp $"); +__RCSID("$NetBSD: setup.c,v 1.104.2.2 2023/05/13 11:54:17 martin Exp $"); #endif #endif /* not lint */ @@ -85,7 +85,8 @@ int16_t sblkpostbl[256]; int setup(const char *dev, const char *origdev) { - long cg, size, asked, i, j; + uint32_t cg; + long size, asked, i, j; long bmapsize; struct disk_geom geo; struct dkwedge_info dkw;