summaryrefslogtreecommitdiffstats
path: root/usr.sbin/quot
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>1998-12-13 07:16:05 +0000
committerdillon <dillon@FreeBSD.org>1998-12-13 07:16:05 +0000
commitfd960d48d63b5e2979147222e9d0f0f85e81f630 (patch)
tree09bf6b61b782b5b6e424d90c8b03c65370c80336 /usr.sbin/quot
parent40ad5890f99644f19f0ac0348b6a383e4137d709 (diff)
downloadFreeBSD-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.c7
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)
OpenPOWER on IntegriCloud