Module Name: src Committed By: martin Date: Sun Oct 13 15:33:17 UTC 2024
Modified Files: src/share/man/man9 [netbsd-9]: ts2timo.9 src/sys/kern [netbsd-9]: subr_time.c Log Message: Pull up following revision(s) (requested by kre in ticket #1909): share/man/man9/ts2timo.9: revision 1.4 share/man/man9/ts2timo.9: revision 1.5 sys/kern/subr_time.c: revision 1.39 (patch) ts2timo() uses struct timespec, those don't have a tv_usec field, they have tv_nsec instead. EINVAL will happen if the tv_nsec field is invalid, not the non-existant tv_usec field. PR kern/58733 - avoid ts2timo() clobbering its arg See the PR for the gory details - in the TIMER_ABSTIME case ts2timo() should not (really *must* not) alter the timespec it is passed (in that case it should be const - but for now anyway, cannot be for the TIMER_RELTIME case, and there is just one of them!). To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.3.34.1 src/share/man/man9/ts2timo.9 cvs rdiff -u -r1.20.8.1 -r1.20.8.2 src/sys/kern/subr_time.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/share/man/man9/ts2timo.9 diff -u src/share/man/man9/ts2timo.9:1.3 src/share/man/man9/ts2timo.9:1.3.34.1 --- src/share/man/man9/ts2timo.9:1.3 Fri May 24 14:41:32 2013 +++ src/share/man/man9/ts2timo.9 Sun Oct 13 15:33:17 2024 @@ -1,4 +1,4 @@ -.\" $NetBSD: ts2timo.9,v 1.3 2013/05/24 14:41:32 njoly Exp $ +.\" $NetBSD: ts2timo.9,v 1.3.34.1 2024/10/13 15:33:17 martin Exp $ .\" .\" Copyright (c) 2013 Christos Zoulas .\" All rights reserved. @@ -51,7 +51,7 @@ or .Dv TIMER_RELTIME . If the interval is specified as an absolute time, then the .Fa clock_id -clock is used to convert it to a relative time. +clock is used to calculate the corresponding relative time. If the .Fa start argument is not @@ -63,18 +63,23 @@ clock is placed in that argument. On success .Fn ts2timo returns -.Dv 0 . +.Dv 0 , +and places the computed number of ticks +in the integer referenced by +.Fa timo . On failure it returns .Er ETIMEDOUT if interval computed was .Dv 0 -or negative, and +or negative, or .Er EINVAL -if -.Fa ts->tv_usec -field in the computed interval is out of range, or the +if the +.Fa ts->tv_nsec +field is out of range, or the .Fa clock_id -argument is invalid. +argument is invalid, or if +computing the relative time from a supplied absolute value +would cause an arithmetic overflow. .Sh SEE ALSO .Xr clock_gettime 2 , .Xr clock_nanosleep 2 Index: src/sys/kern/subr_time.c diff -u src/sys/kern/subr_time.c:1.20.8.1 src/sys/kern/subr_time.c:1.20.8.2 --- src/sys/kern/subr_time.c:1.20.8.1 Fri Oct 11 17:18:05 2024 +++ src/sys/kern/subr_time.c Sun Oct 13 15:33:17 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_time.c,v 1.20.8.1 2024/10/11 17:18:05 martin Exp $ */ +/* $NetBSD: subr_time.c,v 1.20.8.2 2024/10/13 15:33:17 martin Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1993 @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_time.c,v 1.20.8.1 2024/10/11 17:18:05 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_time.c,v 1.20.8.2 2024/10/13 15:33:17 martin Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -316,8 +316,10 @@ ts2timo(clockid_t clock_id, int flags, s if ((error = clock_gettime1(clock_id, start)) != 0) return error; - if (flags) - timespecsub(ts, start, ts); + if (flags) { + timespecsub(ts, start, &tsd); + ts = &tsd; + } if ((error = itimespecfix(ts)) != 0) return error;