summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_time.c
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2006-06-29 19:52:47 +0000
committerkettenis <kettenis@openbsd.org>2006-06-29 19:52:47 +0000
commit53b9ed8b5f7e2ea40116ae274e4cf75239e21763 (patch)
tree583ba093539949b22621d7abf83560175af83967 /sys/kern/kern_time.c
parentregen (diff)
downloadwireguard-openbsd-53b9ed8b5f7e2ea40116ae274e4cf75239e21763.tar.xz
wireguard-openbsd-53b9ed8b5f7e2ea40116ae274e4cf75239e21763.zip
Normalize the correction passed to adjtime(2) before using it in the
__HAVE_TIMECOUNTER case. ok otto@
Diffstat (limited to 'sys/kern/kern_time.c')
-rw-r--r--sys/kern/kern_time.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 52ede68e8d7..3f1e10b57dd 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_time.c,v 1.58 2006/06/27 10:41:27 otto Exp $ */
+/* $OpenBSD: kern_time.c,v 1.59 2006/06/29 19:52:47 kettenis Exp $ */
/* $NetBSD: kern_time.c,v 1.20 1996/02/18 11:57:06 fvdl Exp $ */
/*
@@ -423,6 +423,15 @@ sys_adjtime(struct proc *p, void *v, register_t *retval)
return (error);
}
+ /* Normalize the correction. */
+ while (adjtimedelta.tv_usec >= 1000000) {
+ adjtimedelta.tv_usec -= 1000000;
+ adjtimedelta.tv_sec += 1;
+ }
+ while (adjtimedelta.tv_usec < 0) {
+ adjtimedelta.tv_usec += 1000000;
+ adjtimedelta.tv_sec -= 1;
+ }
return (0);
#else
struct timeval atv;