summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-12-19 09:34:14 +0000
committerkib <kib@FreeBSD.org>2014-12-19 09:34:14 +0000
commitbf071386224cba73f4bec31a49ad96bc73e96677 (patch)
tree7f5589c7521a1df111df092ff36776287d8fbeff /sys/kern
parenteac5956a91676b1404b6076db57f80d70eaef17e (diff)
downloadFreeBSD-src-bf071386224cba73f4bec31a49ad96bc73e96677.zip
FreeBSD-src-bf071386224cba73f4bec31a49ad96bc73e96677.tar.gz
MFC r275727:
For architectures where time_t is wide enough, in particular, 64bit platforms, avoid overflow after year 2038 in clock_ct_to_ts(). PR: 195868
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/subr_clock.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/kern/subr_clock.c b/sys/kern/subr_clock.c
index f30f529..05de5b9 100644
--- a/sys/kern/subr_clock.c
+++ b/sys/kern/subr_clock.c
@@ -133,7 +133,6 @@ print_ct(struct clocktime *ct)
int
clock_ct_to_ts(struct clocktime *ct, struct timespec *ts)
{
- time_t secs;
int i, year, days;
year = ct->year;
@@ -167,11 +166,10 @@ clock_ct_to_ts(struct clocktime *ct, struct timespec *ts)
days += days_in_month(year, i);
days += (ct->day - 1);
- /* Add hours, minutes, seconds. */
- secs = ((days * 24 + ct->hour) * 60 + ct->min) * 60 + ct->sec;
-
- ts->tv_sec = secs;
+ ts->tv_sec = (((time_t)days * 24 + ct->hour) * 60 + ct->min) * 60 +
+ ct->sec;
ts->tv_nsec = ct->nsec;
+
if (ct_debug)
printf(" = %ld.%09ld\n", (long)ts->tv_sec, (long)ts->tv_nsec);
return (0);
OpenPOWER on IntegriCloud