Module Name:    src
Committed By:   apb
Date:           Wed Jan  4 13:40:53 UTC 2012

Modified Files:
        src/sys/dev: clockctl.c

Log Message:
When processing ioctl CLOCKCTL_NTP_ADJTIME, set the return value from
ntp_timestatus instead of leaving it uninitialised, and don't use
copyout(9) because args->retval is in kernel space, not user space.

Previously, running ntpd(8) in unprivileged mode would call
libc ntp_adjtime(), which would open /dev/clockctl and call
ioctl(CLOCKCTL_NTP_ADJTIME), which would fail with EFAULT.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/clockctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/clockctl.c
diff -u src/sys/dev/clockctl.c:1.28 src/sys/dev/clockctl.c:1.29
--- src/sys/dev/clockctl.c:1.28	Sat Oct  3 02:01:12 2009
+++ src/sys/dev/clockctl.c	Wed Jan  4 13:40:53 2012
@@ -1,4 +1,4 @@
-/*      $NetBSD: clockctl.c,v 1.28 2009/10/03 02:01:12 elad Exp $ */
+/*      $NetBSD: clockctl.c,v 1.29 2012/01/04 13:40:53 apb Exp $ */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.28 2009/10/03 02:01:12 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.29 2012/01/04 13:40:53 apb Exp $");
 
 #include "opt_ntp.h"
 #include "opt_compat_netbsd.h"
@@ -147,7 +147,6 @@ clockctlioctl(
 	case CLOCKCTL_NTP_ADJTIME: {
 		struct clockctl_ntp_adjtime *args = data;
 		struct timex ntv;
-		register_t retval;
 
 		error = copyin(args->tp, &ntv, sizeof(ntv));
 		if (error)
@@ -157,7 +156,7 @@ clockctlioctl(
 
 		error = copyout(&ntv, args->tp, sizeof(ntv));
 		if (error == 0)
-			error = copyout(&retval, &args->retval, sizeof(retval));
+			args->retval = ntp_timestatus();
 		break;
 	}
 #endif /* NTP */

Reply via email to