⬢ DragonFlyBSD Kernel Audit
DF-5835 / fix.diff
← back to finding ↓ download raw
--- a/sys/kern/kern_clock.c
+++ b/sys/kern/kern_clock.c
@@ -1195,7 +1195,7 @@
 			sec, usec);
 #endif
 		ticks = 1;
-	} else if (sec <= INT_MAX / hz) {
+	} else if (sec <= (INT_MAX - hz - 1) / hz) {
 		ticks = (int)(sec * hz + howmany((u_long)usec, ustick)) + 1;
 	} else {
 		ticks = INT_MAX;
@@ -1226,7 +1226,7 @@
 			sec, nsec);
 #endif
 		ticks = 1;
-	} else if (sec <= INT_MAX / hz) {
+	} else if (sec <= (INT_MAX - hz - 1) / hz) {
 		ticks = (int)(sec * hz + howmany((u_long)nsec, nstick)) + 1;
 	} else {
 		ticks = INT_MAX;
@@ -1254,7 +1254,7 @@
 	long sec;
 
 	sec = tv->tv_sec;
-	if (sec <= INT_MAX / hz)
+	if (sec <= (INT_MAX - hz - 1) / hz)
 		ticks = (int)(sec * hz + (u_long)tv->tv_usec / ustick);
 	else
 		ticks = INT_MAX;
@@ -1268,7 +1268,7 @@
 	long sec;
 
 	sec = ts->tv_sec;
-	if (sec <= INT_MAX / hz)
+	if (sec <= (INT_MAX - hz - 1) / hz)
 		ticks = (int)(sec * hz + (u_long)ts->tv_nsec / nstick);
 	else
 		ticks = INT_MAX;