Module Name:    src
Committed By:   gson
Date:           Sat Aug  9 07:05:42 UTC 2014

Modified Files:
        src/sys/kern: kern_sysctl.c

Log Message:
Remove the code to allow CTLTYPE_INT and CTLTYPE_QUAD to be read and
written as either 4 or 8 byte values regardless of the type, in
accordance with "Core statement on sysctl 32-bit/64-bit changes",
http://mail-index.netbsd.org/tech-kern/2014/03/26/msg016779.html.


To generate a diff of this commit:
cvs rdiff -u -r1.251 -r1.252 src/sys/kern/kern_sysctl.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/kern/kern_sysctl.c
diff -u src/sys/kern/kern_sysctl.c:1.251 src/sys/kern/kern_sysctl.c:1.252
--- src/sys/kern/kern_sysctl.c:1.251	Thu Jun 12 22:10:04 2014
+++ src/sys/kern/kern_sysctl.c	Sat Aug  9 07:05:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sysctl.c,v 1.251 2014/06/12 22:10:04 joerg Exp $	*/
+/*	$NetBSD: kern_sysctl.c,v 1.252 2014/08/09 07:05:42 gson Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2007, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.251 2014/06/12 22:10:04 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.252 2014/08/09 07:05:42 gson Exp $");
 
 #include "opt_defcorename.h"
 #include "ksyms.h"
@@ -1423,9 +1423,7 @@ sysctl_lookup(SYSCTLFN_ARGS)
 {
 	int error, rw;
 	size_t sz, len;
-	void *d, *d_out;
-	uint64_t qval;
-	int ival;
+	void *d;
 
 	KASSERT(rw_lock_held(&sysctl_treelock));
 
@@ -1501,38 +1499,13 @@ sysctl_lookup(SYSCTLFN_ARGS)
 		d = __UNCONST(&rnode->sysctl_qdata);
 	} else
 		d = rnode->sysctl_data;
-	d_out = d;
 
-	sz = rnode->sysctl_size;
-	switch (SYSCTL_TYPE(rnode->sysctl_flags)) {
-	case CTLTYPE_INT:
-		/* Allow for 64bit read of 32bit value */
-		if (*oldlenp != sz && *oldlenp == sizeof (uint64_t)) {
-			qval = *(int *)d;
-			d_out = &qval;
-			sz =  sizeof (uint64_t);
-		}
-		break;
-	case CTLTYPE_QUAD:
-		/* Allow for 32bit read of 64bit value */
-		if (*oldlenp != sz && *oldlenp == sizeof (int)) {
-			qval = *(uint64_t *)d;
-			ival = qval;
-			/* Replace out of range values with -1 */
-			if (ival != qval)
-				ival = -1;
-			d_out = &ival;
-			sz =  sizeof (int);
-		}
-		break;
-	case CTLTYPE_STRING:
+	if (SYSCTL_TYPE(rnode->sysctl_flags) == CTLTYPE_STRING)
 		sz = strlen(d) + 1; /* XXX@@@ possible fault here */
-		break;
-	default:
-		break;
-	}
+	else
+		sz = rnode->sysctl_size;
 	if (oldp != NULL) {
-		error = sysctl_copyout(l, d_out, oldp, MIN(sz, *oldlenp));
+		error = sysctl_copyout(l, d, oldp, MIN(sz, *oldlenp));
 		if (error) {
 			DPRINTF(("%s: bad copyout %d\n", __func__, error));
 			return error;
@@ -1575,27 +1548,6 @@ sysctl_lookup(SYSCTLFN_ARGS)
 	}
 	case CTLTYPE_INT:
 	case CTLTYPE_QUAD:
-		/* Allow 32bit of 64bit integers */
-		if (newlen == sizeof (uint64_t)) {
-			error = sysctl_copyin(l, newp, &qval, sizeof qval);
-		} else if (newlen == sizeof (int)) {
-			error = sysctl_copyin(l, newp, &ival, sizeof ival);
-			qval = ival;
-		} else {
-			goto bad_size;
-		}
-		if (!error) {
-			if (SYSCTL_TYPE(rnode->sysctl_flags) == CTLTYPE_INT) {
-				ival = qval;
-				/* Error out of range values */
-				if (ival != qval)
-					goto bad_size;
-				*(int *)d = ival;
-			} else {
-				*(uint64_t *)d = qval;
-			}
-		}
-		break;
 	case CTLTYPE_STRUCT:
 		/*
 		 * these data must be *exactly* the same size coming

Reply via email to