summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-12-18 11:10:15 +0000
committerkib <kib@FreeBSD.org>2014-12-18 11:10:15 +0000
commit3abf5d53d81ee69ddbaeabfdfe7a6eb8a7c1d1d5 (patch)
treef99e3f86dda5dc6da37b3d0be2d844d3245dddba /sys/kern
parent66c7f00f2922225707ca7d952b314eb6d1184a32 (diff)
downloadFreeBSD-src-3abf5d53d81ee69ddbaeabfdfe7a6eb8a7c1d1d5.zip
FreeBSD-src-3abf5d53d81ee69ddbaeabfdfe7a6eb8a7c1d1d5.tar.gz
MFC r259609 (by se):
Fix overflow for timeout values of more than 68 years, which is the maximum covered by sbintime (LONG_MAX seconds). MFC r259633 (by se): Fix compilation on 32 bit architectures and use INT64_MAX instead of LONG_MAX for the upper bound check.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_event.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index 8ab59bb..e70a9cf 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -522,10 +522,14 @@ knote_fork(struct knlist *list, int pid)
* XXX: EVFILT_TIMER should perhaps live in kern_time.c beside the
* interval timer support code.
*/
-static __inline sbintime_t
+static __inline sbintime_t
timer2sbintime(intptr_t data)
{
+#ifdef __LP64__
+ if (data > INT64_MAX / SBT_1MS)
+ return INT64_MAX;
+#endif
return (SBT_1MS * data);
}
OpenPOWER on IntegriCloud