svn commit: r360520 - stable/12/sbin/fsck_msdosfs

Xin LI delphij at FreeBSD.org
Fri May 1 04:16:57 UTC 2020


Author: delphij
Date: Fri May  1 04:16:57 2020
New Revision: 360520
URL: https://svnweb.freebsd.org/changeset/base/360520

Log:
  MFC r360428: Do not overflow when calculating file system size.

Modified:
  stable/12/sbin/fsck_msdosfs/check.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sbin/fsck_msdosfs/check.c
==============================================================================
--- stable/12/sbin/fsck_msdosfs/check.c	Fri May  1 01:31:19 2020	(r360519)
+++ stable/12/sbin/fsck_msdosfs/check.c	Fri May  1 04:16:57 2020	(r360520)
@@ -54,6 +54,8 @@ checkfilesys(const char *fname)
 	int finish_dosdirsection=0;
 	int mod = 0;
 	int ret = 8;
+	int64_t freebytes;
+	int64_t badbytes;
 
 	rdonly = alwaysno;
 	if (!preen)
@@ -129,37 +131,33 @@ checkfilesys(const char *fname)
 			mod |= FSERROR;
 	}
 
+	freebytes = (int64_t)boot.NumFree * boot.ClusterSize;
+	badbytes = (int64_t)boot.NumBad * boot.ClusterSize;
+
 #ifdef HAVE_LIBUTIL_H
 	char freestr[7], badstr[7];
 
-	int64_t freebytes = boot.NumFree * boot.ClusterSize;
 	humanize_number(freestr, sizeof(freestr), freebytes, "",
 	    HN_AUTOSCALE, HN_DECIMAL | HN_IEC_PREFIXES);
 	if (boot.NumBad) {
-		int64_t badbytes = boot.NumBad * boot.ClusterSize;
-
 		humanize_number(badstr, sizeof(badstr), badbytes, "",
 		    HN_AUTOSCALE, HN_B | HN_DECIMAL | HN_IEC_PREFIXES);
 
 		pwarn("%d files, %sB free (%d clusters), %sB bad (%d clusters)\n",
-		      boot.NumFiles,
-		      freestr, boot.NumFree,
+		      boot.NumFiles, freestr, boot.NumFree,
 		      badstr, boot.NumBad);
 	} else {
 		pwarn("%d files, %sB free (%d clusters)\n",
-		      boot.NumFiles,
-		      freestr, boot.NumFree);
+		      boot.NumFiles, freestr, boot.NumFree);
 	}
 #else
 	if (boot.NumBad)
-		pwarn("%d files, %d KiB free (%d clusters), %d KiB bad (%d clusters)\n",
-		      boot.NumFiles,
-		      boot.NumFree * boot.ClusterSize / 1024, boot.NumFree,
-		      boot.NumBad * boot.ClusterSize / 1024, boot.NumBad);
+		pwarn("%d files, %jd KiB free (%d clusters), %jd KiB bad (%d clusters)\n",
+		      boot.NumFiles, (intmax_t)freebytes / 1024, boot.NumFree,
+		      (intmax_t)badbytes / 1024, boot.NumBad);
 	else
-		pwarn("%d files, %d KiB free (%d clusters)\n",
-		      boot.NumFiles,
-		      boot.NumFree * boot.ClusterSize / 1024, boot.NumFree);
+		pwarn("%d files, %jd KiB free (%d clusters)\n",
+		      boot.NumFiles, (intmax_t)freebytes / 1024, boot.NumFree);
 #endif
 
 	if (mod && (mod & FSERROR) == 0) {


More information about the svn-src-all mailing list