untrusted comment: signature from openbsd 5.9 base secret key
RWQJVNompF3pwY3hTr/yToUM9uaGJZxlLDp7+CScxTruNSLryJtcJ2V4ZnpRBehtQfGQVskPYTLWG8gOfYhuSjbxjKBUuc12YwU=

OpenBSD 5.9 errata 18, Jul 14, 2016:

Tick counting overflows could cause a kernel crash.

Apply by doing:
   signify -Vep /etc/signify/openbsd-59-base.pub -x 018_timeout.patch.sig \
       -m - | (cd /usr/src && patch -p0)

And then rebuild and install a kernel:
   cd /usr/src/sys/arch/`machine`/conf
   KK=`sysctl -n kern.osversion | cut -d# -f1`
   config $KK
   cd ../compile/$KK
   make
   make install

Index: sys/kern/kern_sig.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_sig.c,v
retrieving revision 1.192
diff -u -p -r1.192 kern_sig.c
--- sys/kern/kern_sig.c 9 Jan 2016 06:13:43 -0000       1.192
+++ sys/kern/kern_sig.c 14 Jul 2016 02:43:08 -0000
@@ -1716,7 +1716,7 @@ sys___thrsigdivert(struct proc *p, void
       sigset_t *m;
       sigset_t mask = SCARG(uap, sigmask) &~ sigcantmask;
       siginfo_t si;
-       long long to_ticks = 0;
+       uint64_t to_ticks = 0;
       int timeinvalid = 0;
       int error = 0;

@@ -1733,7 +1733,7 @@ sys___thrsigdivert(struct proc *p, void
               if (ts.tv_nsec < 0 || ts.tv_nsec >= 1000000000)
                       timeinvalid = 1;
               else {
-                       to_ticks = (long long)hz * ts.tv_sec +
+                       to_ticks = (uint64_t)hz * ts.tv_sec +
                           ts.tv_nsec / (tick * 1000);
                       if (to_ticks > INT_MAX)
                               to_ticks = INT_MAX;
Index: sys/kern/kern_synch.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_synch.c,v
retrieving revision 1.128
diff -u -p -r1.128 kern_synch.c
--- sys/kern/kern_synch.c       1 Feb 2016 23:34:31 -0000       1.128
+++ sys/kern/kern_synch.c       14 Jul 2016 02:43:08 -0000
@@ -475,7 +475,7 @@ thrsleep(struct proc *p, struct sys___th
       long ident = (long)SCARG(uap, ident);
       struct timespec *tsp = (struct timespec *)SCARG(uap, tp);
       void *lock = SCARG(uap, lock);
-       long long to_ticks = 0;
+       uint64_t to_ticks = 0;
       int abort, error;
       clockid_t clock_id = SCARG(uap, clock_id) & 0x7;
       int lockflags = SCARG(uap, clock_id) & 0x8;
@@ -500,7 +500,7 @@ thrsleep(struct proc *p, struct sys___th
               }

               timespecsub(tsp, &now, tsp);
-               to_ticks = (long long)hz * tsp->tv_sec +
+               to_ticks = (uint64_t)hz * tsp->tv_sec +
                   (tsp->tv_nsec + tick * 1000 - 1) / (tick * 1000) + 1;
               if (to_ticks > INT_MAX)
                       to_ticks = INT_MAX;
Index: sys/kern/kern_tc.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_tc.c,v
retrieving revision 1.28
diff -u -p -r1.28 kern_tc.c
--- sys/kern/kern_tc.c  10 Dec 2014 02:44:47 -0000      1.28
+++ sys/kern/kern_tc.c  14 Jul 2016 02:43:43 -0000
@@ -357,7 +357,7 @@ tc_setclock(struct timespec *ts)
       /* convert the bintime to ticks */
       bintime_sub(&bt, &bt2);
       bintime_add(&naptime, &bt);
-       adj_ticks = (long long)hz * bt.sec +
+       adj_ticks = (uint64_t)hz * bt.sec +
           (((uint64_t)1000000 * (uint32_t)(bt.frac >> 32)) >> 32) / tick;
       if (adj_ticks > 0) {
               if (adj_ticks > INT_MAX)
Index: sys/kern/kern_timeout.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_timeout.c,v
retrieving revision 1.43
diff -u -p -r1.43 kern_timeout.c
--- sys/kern/kern_timeout.c     20 Jul 2015 23:47:20 -0000      1.43
+++ sys/kern/kern_timeout.c     14 Jul 2016 02:43:43 -0000
@@ -202,9 +202,9 @@ timeout_add(struct timeout *new, int to_
int
timeout_add_tv(struct timeout *to, const struct timeval *tv)
{
-       long long to_ticks;
+       uint64_t to_ticks;

-       to_ticks = (long long)hz * tv->tv_sec + tv->tv_usec / tick;
+       to_ticks = (uint64_t)hz * tv->tv_sec + tv->tv_usec / tick;
       if (to_ticks > INT_MAX)
               to_ticks = INT_MAX;

@@ -214,9 +214,9 @@ timeout_add_tv(struct timeout *to, const
int
timeout_add_ts(struct timeout *to, const struct timespec *ts)
{
-       long long to_ticks;
+       uint64_t to_ticks;

-       to_ticks = (long long)hz * ts->tv_sec + ts->tv_nsec / (tick * 1000);
+       to_ticks = (uint64_t)hz * ts->tv_sec + ts->tv_nsec / (tick * 1000);
       if (to_ticks > INT_MAX)
               to_ticks = INT_MAX;

@@ -226,9 +226,9 @@ timeout_add_ts(struct timeout *to, const
int
timeout_add_bt(struct timeout *to, const struct bintime *bt)
{
-       long long to_ticks;
+       uint64_t to_ticks;

-       to_ticks = (long long)hz * bt->sec + (long)(((uint64_t)1000000 *
+       to_ticks = (uint64_t)hz * bt->sec + (long)(((uint64_t)1000000 *
           (uint32_t)(bt->frac >> 32)) >> 32) / tick;
       if (to_ticks > INT_MAX)
               to_ticks = INT_MAX;
@@ -239,9 +239,9 @@ timeout_add_bt(struct timeout *to, const
int
timeout_add_sec(struct timeout *to, int secs)
{
-       long long to_ticks;
+       uint64_t to_ticks;

-       to_ticks = (long long)hz * secs;
+       to_ticks = (uint64_t)hz * secs;
       if (to_ticks > INT_MAX)
               to_ticks = INT_MAX;

@@ -251,9 +251,9 @@ timeout_add_sec(struct timeout *to, int
int
timeout_add_msec(struct timeout *to, int msecs)
{
-       long long to_ticks;
+       uint64_t to_ticks;

-       to_ticks = (long long)msecs * 1000 / tick;
+       to_ticks = (uint64_t)msecs * 1000 / tick;
       if (to_ticks > INT_MAX)
               to_ticks = INT_MAX;