summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2021-07-19 18:57:51 +1000
committerChris Johns <chrisj@rtems.org>2021-08-02 18:59:50 +1000
commit41e33a4e4264223f081633d65bc1c98fe75b068d (patch)
tree2b6c9aeee3fda712231d97ab36b48dc4baacf30a
parentd436d7f9b0db3f3b6311da4677e03baf365b978f (diff)
rtemsbsd: Catch timeout overflows
Update #4475
-rw-r--r--rtemsbsd/rtems/rtems-kernel-timesupport.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/rtemsbsd/rtems/rtems-kernel-timesupport.c b/rtemsbsd/rtems/rtems-kernel-timesupport.c
index ef14d1fa..bc2e7b9f 100644
--- a/rtemsbsd/rtems/rtems-kernel-timesupport.c
+++ b/rtemsbsd/rtems/rtems-kernel-timesupport.c
@@ -37,6 +37,7 @@
#include <sys/time.h>
+#include <limits.h>
#include <rtems/score/timespec.h>
/*
@@ -45,10 +46,15 @@
int
tvtohz(struct timeval *tv)
{
- struct timespec ts;
+ struct timespec ts;
+ uint32_t ticks;
- ts.tv_sec = tv->tv_sec;
- ts.tv_nsec = tv->tv_usec * 1000;
+ ts.tv_sec = tv->tv_sec;
+ ts.tv_nsec = tv->tv_usec * 1000;
- return (int) _Timespec_To_ticks( &ts );
+ ticks = _Timespec_To_ticks(&ts);
+ if (ticks > INT_MAX)
+ ticks = INT_MAX;
+
+ return ticks;
}