diff options
author | dillon <dillon@FreeBSD.org> | 1998-12-13 07:16:05 +0000 |
---|---|---|
committer | dillon <dillon@FreeBSD.org> | 1998-12-13 07:16:05 +0000 |
commit | fd960d48d63b5e2979147222e9d0f0f85e81f630 (patch) | |
tree | 09bf6b61b782b5b6e424d90c8b03c65370c80336 /usr.sbin/quot | |
parent | 40ad5890f99644f19f0ac0348b6a383e4137d709 (diff) | |
download | FreeBSD-src-fd960d48d63b5e2979147222e9d0f0f85e81f630.zip FreeBSD-src-fd960d48d63b5e2979147222e9d0f0f85e81f630.tar.gz |
PR: bin/8624
Fixed intermediate calculation overflow when reporting users with > 2GB of
disk space.
Diffstat (limited to 'usr.sbin/quot')
-rw-r--r-- | usr.sbin/quot/quot.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/usr.sbin/quot/quot.c b/usr.sbin/quot/quot.c index 7be0641..547fd8f 100644 --- a/usr.sbin/quot/quot.c +++ b/usr.sbin/quot/quot.c @@ -31,7 +31,7 @@ #ifndef lint static const char rcsid[] = - "$Id: quot.c,v 1.7 1997/10/10 06:31:07 charnier Exp $"; + "$Id: quot.c,v 1.8 1998/01/17 16:45:03 bde Exp $"; #endif /* not lint */ #include <sys/param.h> @@ -66,11 +66,14 @@ static int headerlen; * The new code always counts the number of 512 byte blocks * instead of the number of kilobytes and converts them to * kByte when done (on request). + * + * Due to the size of modern disks, we must cast intermediate + * values to 64 bits to prevent potential overflows. */ #ifdef COMPAT #define SIZE(n) (n) #else -#define SIZE(n) (((n) * 512 + blocksize - 1)/blocksize) +#define SIZE(n) ((int)(((quad_t)(n) * 512 + blocksize - 1)/blocksize)) #endif #define INOCNT(fs) ((fs)->fs_ipg) |