aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2022-04-06 03:35:27 +0000
committerWarner Losh <imp@FreeBSD.org>2022-04-06 03:36:59 +0000
commit4c30b9ecd47a2d92565731082a6a4f2bd1e6e051 (patch)
treef57e513b32372cc354fb89f90d5eeab82bba18a0
parentf00f8b4fbd268a212687984e44daa3e0d0a16b87 (diff)
downloadsrc-4c30b9ecd47a2d92565731082a6a4f2bd1e6e051.tar.gz
src-4c30b9ecd47a2d92565731082a6a4f2bd1e6e051.zip
fix integer overflow bugs in *stosbt
68f57679d660 Fixed another class of integer overflows, but introduced a boundary condition for 2-4s in ns conversion, 2-~4000s in us conversions and 2-~4,000,000s in ms conversions. This was because we bogusly used SBT_1S for the notion of 1 second, instead of the appropriate power of 10. To fix, just use the appropriate power of 10, which avoids these overflows. This caused some sleeps in ZFS to be on the order of an hour. MFC: 1 day PR: 263073 Sponsored by: Netflix Reviewed by: asomers Differential Revision: https://reviews.freebsd.org/D34790
-rw-r--r--sys/sys/time.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/sys/time.h b/sys/sys/time.h
index 866a9e788cd0..f3a3bc99a0f2 100644
--- a/sys/sys/time.h
+++ b/sys/sys/time.h
@@ -207,7 +207,7 @@ nstosbt(int64_t _ns)
#ifdef KASSERT
KASSERT(_ns >= 0, ("Negative values illegal for nstosbt: %jd", _ns));
#endif
- if (_ns >= SBT_1S) {
+ if (_ns >= 1000000000) {
sb = (_ns / 1000000000) * SBT_1S;
_ns = _ns % 1000000000;
}
@@ -231,7 +231,7 @@ ustosbt(int64_t _us)
#ifdef KASSERT
KASSERT(_us >= 0, ("Negative values illegal for ustosbt: %jd", _us));
#endif
- if (_us >= SBT_1S) {
+ if (_us >= 1000000) {
sb = (_us / 1000000) * SBT_1S;
_us = _us % 1000000;
}
@@ -255,7 +255,7 @@ mstosbt(int64_t _ms)
#ifdef KASSERT
KASSERT(_ms >= 0, ("Negative values illegal for mstosbt: %jd", _ms));
#endif
- if (_ms >= SBT_1S) {
+ if (_ms >= 1000) {
sb = (_ms / 1000) * SBT_1S;
_ms = _ms % 1000;
}