diff options
author | dfr <dfr@FreeBSD.org> | 1998-12-27 18:03:29 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 1998-12-27 18:03:29 +0000 |
commit | 9238b8271dba66bff7d748e765d7930407e62c0e (patch) | |
tree | 9ea9431f80a2fb0797ec7a3226df618d63334d8b /sys/kern | |
parent | ab302cd2cde3a14092cba2812798a98860e1e41b (diff) | |
download | FreeBSD-src-9238b8271dba66bff7d748e765d7930407e62c0e.zip FreeBSD-src-9238b8271dba66bff7d748e765d7930407e62c0e.tar.gz |
Fix some 64bit truncation problems which crept into SYSCTL_LONG() with the
last cleanup. Since the oid_arg2 field of struct sysctl_oid is not wide
enough to hold a long, the SYSCTL_LONG() macro has been modified to only
support exporting long variables by pointer instead of by value.
Reviewed by: bde
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_exec.c | 9 | ||||
-rw-r--r-- | sys/kern/kern_sysctl.c | 38 | ||||
-rw-r--r-- | sys/kern/subr_devstat.c | 4 |
3 files changed, 12 insertions, 39 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index e3a3b71..93e7bbd 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: kern_exec.c,v 1.89 1998/12/16 16:06:27 bde Exp $ + * $Id: kern_exec.c,v 1.90 1998/12/16 16:28:57 bde Exp $ */ #include <sys/param.h> @@ -66,8 +66,11 @@ static long *exec_copyout_strings __P((struct image_params *)); -SYSCTL_LONG(_kern, KERN_PS_STRINGS, ps_strings, CTLFLAG_RD, 0, PS_STRINGS, ""); -SYSCTL_LONG(_kern, KERN_USRSTACK, usrstack, CTLFLAG_RD, 0, USRSTACK, ""); +static long ps_strings = PS_STRINGS; +SYSCTL_LONG(_kern, KERN_PS_STRINGS, ps_strings, CTLFLAG_RD, &ps_strings, ""); + +static long usrstack = USRSTACK; +SYSCTL_LONG(_kern, KERN_USRSTACK, usrstack, CTLFLAG_RD, &usrstack, ""); /* * Each of the items is a pointer to a `const struct execsw', hence the diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index b43c4ee..55e583b 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -37,7 +37,7 @@ * SUCH DAMAGE. * * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94 - * $Id: kern_sysctl.c,v 1.79 1998/12/04 22:54:51 archie Exp $ + * $Id: kern_sysctl.c,v 1.80 1998/12/13 07:18:54 truckman Exp $ */ #include "opt_compat.h" @@ -497,7 +497,7 @@ SYSCTL_NODE(_sysctl, 4, oidfmt, CTLFLAG_RD, sysctl_sysctl_oidfmt, ""); */ /* - * Handle an integer, signed or unsigned. + * Handle an int, signed or unsigned. * Two cases: * a variable: point arg1 at it. * a constant: pass it in arg2. @@ -524,7 +524,7 @@ sysctl_handle_int SYSCTL_HANDLER_ARGS } /* - * Handle an integer, signed or unsigned. + * Handle a long, signed or unsigned. * Two cases: * a variable: point arg1 at it. * a constant: pass it in arg2. @@ -535,10 +535,7 @@ sysctl_handle_long SYSCTL_HANDLER_ARGS { int error = 0; - if (arg1) - error = SYSCTL_OUT(req, arg1, sizeof(long)); - else - error = SYSCTL_OUT(req, &arg2, sizeof(long)); + error = SYSCTL_OUT(req, arg1, sizeof(long)); if (error || !req->newptr) return (error); @@ -551,33 +548,6 @@ sysctl_handle_long SYSCTL_HANDLER_ARGS } /* - * Handle an integer, signed or unsigned. - * Two cases: - * a variable: point arg1 at it. - * a constant: pass it in arg2. - */ - -int -sysctl_handle_intptr SYSCTL_HANDLER_ARGS -{ - int error = 0; - - if (arg1) - error = SYSCTL_OUT(req, arg1, sizeof(intptr_t)); - else - error = SYSCTL_OUT(req, &arg2, sizeof(intptr_t)); - - if (error || !req->newptr) - return (error); - - if (!arg1) - error = EPERM; - else - error = SYSCTL_IN(req, arg1, sizeof(intptr_t)); - return (error); -} - -/* * Handle our generic '\0' terminated 'C' string. * Two cases: * a variable string: point arg1 at it, arg2 is max length. diff --git a/sys/kern/subr_devstat.c b/sys/kern/subr_devstat.c index 8976c3b..5fcf88e 100644 --- a/sys/kern/subr_devstat.c +++ b/sys/kern/subr_devstat.c @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: subr_devstat.c,v 1.6 1998/11/15 23:57:22 ken Exp $ + * $Id: subr_devstat.c,v 1.7 1998/12/04 22:54:51 archie Exp $ */ #include <sys/param.h> @@ -243,6 +243,6 @@ SYSCTL_PROC(_kern_devstat, OID_AUTO, all, CTLFLAG_RD|CTLTYPE_OPAQUE, SYSCTL_INT(_kern_devstat, OID_AUTO, numdevs, CTLFLAG_RD, &devstat_num_devs, 0, "Number of devices in the devstat list"); SYSCTL_LONG(_kern_devstat, OID_AUTO, generation, CTLFLAG_RD, - &devstat_generation, 0, "Devstat list generation"); + &devstat_generation, "Devstat list generation"); SYSCTL_INT(_kern_devstat, OID_AUTO, version, CTLFLAG_RD, &devstat_version, 0, "Devstat list version number"); |