Unless there's a good reason to wait, we ought to validate the input
as soon as we have it.  There is no reason to wait to validate the
input time in this context.

ok?

Index: kern_time.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_time.c,v
retrieving revision 1.159
diff -u -p -r1.159 kern_time.c
--- kern_time.c 5 Dec 2022 23:18:37 -0000       1.159
+++ kern_time.c 14 Dec 2022 23:51:14 -0000
@@ -375,19 +375,22 @@ sys_settimeofday(struct proc *p, void *v
        if ((error = suser(p)))
                return (error);
        /* Verify all parameters before changing time. */
-       if (tv && (error = copyin(tv, &atv, sizeof(atv))))
-               return (error);
-       if (tzp && (error = copyin(tzp, &atz, sizeof(atz))))
-               return (error);
-       if (tv) {
-               struct timespec ts;
-
+       if (tv != NULL) {
+               error = copyin(tv, &atv, sizeof(atv));
+               if (error)
+                       return error;
 #ifdef KTRACE
                if (KTRPOINT(p, KTR_STRUCT))
                        ktrabstimeval(p, &atv);
 #endif
                if (!timerisvalid(&atv))
                        return (EINVAL);
+       }
+       if (tzp && (error = copyin(tzp, &atz, sizeof(atz))))
+               return (error);
+       if (tv) {
+               struct timespec ts;
+
                TIMEVAL_TO_TIMESPEC(&atv, &ts);
                if ((error = settime(&ts)) != 0)
                        return (error);

Reply via email to