Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Dec 1996 22:39:55 -0600 (CST)
From:      randy@zyzzyva.com
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/2230: SEGV in sysctl for version 2.2
Message-ID:  <199612170439.WAA06974@sierra.zyzzyva.com>
Resent-Message-ID: <199612170440.UAA26377@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         2230
>Category:       kern
>Synopsis:       SEGV in sysctl
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 16 20:40:01 PST 1996
>Last-Modified:
>Originator:     Randy Terbush
>Organization:
Zyzzyva Enterprises
>Release:        FreeBSD 2.2-RELEASE i386
>Environment:

	2.2-RELEASE supped 6:00amCST 16/12/96
	P5-133
	64MB RAM

	The following kernel variables have been "tweaked".

	maxusers        256
	options         NMBCLUSTERS=4096
	options         DFLDSIZ=33554432
	options         DFLSSIZ=1048576
	options         CHILD_MAX=1536
	options         OPEN_MAX=1536
	options         "FD_SETSIZE=1024"

>Description:

	'sysctl kern' dumps core

>How-To-Repeat:

	(gdb) r kern
Starting program: /usr/obj/nfs/zwww1/var/src/usr.sbin/sysctl/sysctl kern
kern.ostype: FreeBSD
kern.osrelease: 2.2-RELEASE
kern.osrevision: 199506
kern.version: FreeBSD 2.2-RELEASE #1: Sat Dec 14 11:50:01 CST 1996
    kroot@sierra:/nfs/zwww1/var/src/sys/compile/SIERRA

kern.maxvnodes: 7881
kern.maxproc: 4116
kern.maxfiles: 8232
kern.argmax: 65536
kern.securelevel: -1
kern.hostname: sierra
kern.hostid: 0
kern.clockrate: { hz = 100, tick = 10000, profhz = 1024, stathz = 128 }

Program received signal SIGSEGV, Segmentation fault.
show_var (oid=0xefbfd750, nlen=2)
    at /nfs/zwww1/var/src/usr.sbin/sysctl/sysctl.c:349
349             i = sysctl(oid, nlen, val, &len, 0, 0);
(gdb) bt
#0  show_var (oid=0xefbfd750, nlen=2)
    at /nfs/zwww1/var/src/usr.sbin/sysctl/sysctl.c:349
#1  0x2807 in sysctl_all (oid=0xefbfdc1c, len=1)
    at /nfs/zwww1/var/src/usr.sbin/sysctl/sysctl.c:456
#2  0x1b38 in parse (string=0xefbfdd26 "kern")
    at /nfs/zwww1/var/src/usr.sbin/sysctl/sysctl.c:154
#3  0x189b in main (argc=0, argv=0xefbfdcac)
    at /nfs/zwww1/var/src/usr.sbin/sysctl/sysctl.c:107
(gdb) l
344             i = sysctl(oid, nlen, 0, &j, 0, 0);
345             j += j; /* we want to be sure :-) */
346
347             val = alloca(j);
348             len = j;
349             i = sysctl(oid, nlen, val, &len, 0, 0);
350             if (i || !len)
351                     return (1);
352
353             if (bflag) {
(gdb) 

After several calls to this piece of code, alloca() allocates a
bogus address which is not being checked for here.

Breakpoint 1, show_var (oid=0xefbfd750, nlen=2)
    at /nfs/zwww1/var/src/usr.sbin/sysctl/sysctl.c:345
345             j += j; /* we want to be sure :-) */
(gdb) s
347             val = alloca(j);
(gdb) 
348             len = j;
(gdb) p val
$20 = (
    unsigned char *) 0xefa3df98 <Error reading address 0xefa3df98: Invalid argument>
(gdb) 


>Fix:
	


>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612170439.WAA06974>