Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sbin/resize_ffs Fix the most obvious integer overflow errors...
details: https://anonhg.NetBSD.org/src/rev/8face2ff10ce
branches: trunk
changeset: 826775:8face2ff10ce
user: sborrill <sborrill%NetBSD.org@localhost>
date: Thu Sep 28 17:07:20 2017 +0000
description:
Fix the most obvious integer overflow errors which can lead to superblock
corruption. Thanks to riastradh@
For example:
# df /data
Filesystem 1K-blocks Used Avail %Cap Mounted on
/dev/ccd0d -19974939099004 -19982708701532 -737868756431824584 0% /data
# dumpfs -s /dev/rccd0d
file system: /dev/rccd0d
format FFSv2
endian little-endian
location 65536 (-b 128)
magic 19540119 time Thu Sep 28 13:18:10 2017
superblock location 65536 id [ 595fa4a5 3363fe37 ]
cylgrp dynamic inodes FFSv2 sblock FFSv2 fslevel 5
nbfree 242773148 ndir 211185 nifree 650798800 nffree
215448
ncg 13933 size 2647654400 blocks -4993734774751
bsize 32768 shift 15 mask 0xffff8000
fsize 4096 shift 12 mask 0xfffff000
frag 8 shift 3 fsbtodb 3
bpg 23754 fpg 190032 ipg 46848
minfree 5% optim time maxcontig 2 maxbpg 4096
symlinklen 120 contigsumsize 2
maxfilesize 0x000800800805ffff
nindir 4096 inopb 128
avgfilesize 16384 avgfpdir 64
sblkno 24 cblkno 32 iblkno 40 dblkno 2968
sbsize 4096 cgsize 32768
csaddr 35792 cssize 225280
cgrotor 0 fmod 0 ronly 0 clean 0x01
wapbl version 0x1 location 2 flags 0x0
wapbl loc0 6354693888 loc1 131072 loc2 512 loc3 3
flags none
fsmnt /data
volname swuid 0
diffstat:
sbin/resize_ffs/resize_ffs.c | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diffs (72 lines):
diff -r bed77b55a76c -r 8face2ff10ce sbin/resize_ffs/resize_ffs.c
--- a/sbin/resize_ffs/resize_ffs.c Thu Sep 28 16:26:14 2017 +0000
+++ b/sbin/resize_ffs/resize_ffs.c Thu Sep 28 17:07:20 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: resize_ffs.c,v 1.47 2016/08/24 07:44:05 dholland Exp $ */
+/* $NetBSD: resize_ffs.c,v 1.48 2017/09/28 17:07:20 sborrill Exp $ */
/* From sources sent on February 17, 2003 */
/*-
* As its sole author, I explicitly place this code in the public
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: resize_ffs.c,v 1.47 2016/08/24 07:44:05 dholland Exp $");
+__RCSID("$NetBSD: resize_ffs.c,v 1.48 2017/09/28 17:07:20 sborrill Exp $");
#include <sys/disk.h>
#include <sys/disklabel.h>
@@ -462,10 +462,10 @@
initcg(int cgn)
{
struct cg *cg; /* The in-core cg, of course */
- int base; /* Disk address of cg base */
- int dlow; /* Size of pre-cg data area */
- int dhigh; /* Offset of post-inode data area, from base */
- int dmax; /* Offset of end of post-inode data area */
+ int64_t base; /* Disk address of cg base */
+ int64_t dlow; /* Size of pre-cg data area */
+ int64_t dhigh; /* Offset of post-inode data area, from base */
+ int64_t dmax; /* Offset of end of post-inode data area */
int i; /* Generic loop index */
int n; /* Generic count */
int start; /* start of cg maps */
@@ -896,10 +896,10 @@
newsb->fs_dsize = 0;
for (i = 0; i < newsb->fs_ncg; i++) {
- int dlow; /* size of before-sb data area */
- int dhigh; /* offset of post-inode data area */
- int dmax; /* total size of cg */
- int base; /* base of cg, since cgsblock() etc add it in */
+ int64_t dlow; /* size of before-sb data area */
+ int64_t dhigh; /* offset of post-inode data area */
+ int64_t dmax; /* total size of cg */
+ int64_t base; /* base of cg, since cgsblock() etc add it in */
base = cgbase(newsb, i);
dlow = cgsblock(newsb, i) - base;
dhigh = cgdmin(newsb, i) - base;
@@ -1365,7 +1365,7 @@
static void
evict_data(struct cg * cg, unsigned int minfrag, int nfrag)
{
- int base; /* base of cg (in frags from beginning of fs) */
+ int64_t base; /* base of cg (in frags from beginning of fs) */
base = cgbase(oldsb, cg->cg_cgx);
/* Does the boundary fall in the middle of a block? To avoid
@@ -1781,10 +1781,10 @@
csum_fixup();
/* Evict data from any cgs being wholly eliminated */
for (i = newsb->fs_ncg; i < oldsb->fs_ncg; i++) {
- int base;
- int dlow;
- int dhigh;
- int dmax;
+ int64_t base;
+ int64_t dlow;
+ int64_t dhigh;
+ int64_t dmax;
base = cgbase(oldsb, i);
dlow = cgsblock(oldsb, i) - base;
dhigh = cgdmin(oldsb, i) - base;
Home |
Main Index |
Thread Index |
Old Index