Date: Fri, 17 Aug 2001 08:44:43 -0700 (PDT) From: Russell Cattelan <cattelan@thebarn.com> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/29808: ypserv dumps core in yp_find_db Message-ID: <200108171544.f7HFihX74733@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 29808
>Category: bin
>Synopsis: ypserv dumps core in yp_find_db
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Aug 17 08:50:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Russell Cattelan
>Release:
>Organization:
Digital Elves Inc.
>Environment:
FreeBSD congo.borg.umn.edu 4.3-STABLE FreeBSD 4.3-STABLE #1: Wed Jun 20 19:16:17 CDT 2001 root@congo.borg.umn.edu:/.amd_mnt/tigris/export/barn/build/src4/sys/compile/CONGO i386
>Description:
This machine is a slave server to an IRIX ypmaster server.
Every once in a while the ypserv process will core with
either qptr or qptr->dbptr being NULL.
The simple fix it so add checks for NULL but
given this is a circular list how could these
pointers end up NULL?
#0 yp_find_db (name=0xbfbfe3dc "lcse-c/services", key=0x0, size=0)
at /.amd_mnt/tigris/export/barn/build/src4/usr.sbin/ypserv/yp_dblookup.c:335
335 if (qptr->dbptr && !strcmp(qptr->dbptr->name, name)) {
(gdb) ping qptr
Undefined command: "ping". Try "help".
(gdb) print qptr
$1 = (struct circleq_entry *) 0x0
(gdb) list
330 /.amd_mnt/tigris/export/barn/build/src4/usr.sbin/ypserv/yp_dblookup.c: No such file o
r directory.
(gdb) dir /usr/src//usr.sbin/ypserv/
Source directories searched: /usr/src//usr.sbin/ypserv:$cdir:$cwd
(gdb) list
330 {
331 register struct circleq_entry *qptr;
332
333 for (qptr = qhead.cqh_first; qptr != (void *)&qhead;
334 qptr = qptr->links.cqe_next) {
335 if (qptr->dbptr && !strcmp(qptr->dbptr->name, name)) {
336 if (size) {
337 if (size != qptr->dbptr->size ||
338 strncmp(qptr->dbptr->key, key, size))
339 continue;
(gdb) quit
>How-To-Repeat:
>Fix:
Index: yp_dblookup.c
===================================================================
RCS file: /home/cattelan/FreeBSD-CVS/src/usr.sbin/ypserv/yp_dblookup.c,v
retrieving revision 1.17
diff -c -r1.17 yp_dblookup.c
*** yp_dblookup.c 1999/08/28 01:21:11 1.17
--- yp_dblookup.c 2001/08/17 15:34:55
***************
*** 234,245 ****
--- 234,250 ----
for (qptr = qhead.cqh_first; qptr != (void *)&qhead;
qptr = qptr->links.cqe_next) {
+ if (qptr->dbptr && qptr->dbptr->name){
if (!strcmp(qptr->dbptr->name, buf)) {
if (qptr->dbptr->flags & flag)
return(1);
else
return(0);
}
+ } else {
+ fprintf(stderr,"got null qptr->dbptr or -> name\n");
+ return(0);
+ }
}
if (yp_open_db_cache(domain, map, NULL, 0) == NULL)
***************
*** 327,333 ****
for (qptr = qhead.cqh_first; qptr != (void *)&qhead;
qptr = qptr->links.cqe_next) {
! if (!strcmp(qptr->dbptr->name, name)) {
if (size) {
if (size != qptr->dbptr->size ||
strncmp(qptr->dbptr->key, key, size))
--- 332,338 ----
for (qptr = qhead.cqh_first; qptr != (void *)&qhead;
qptr = qptr->links.cqe_next) {
! if (qptr && qptr->dbptr && !strcmp(qptr->dbptr->name, name)) {
if (size) {
if (size != qptr->dbptr->size ||
strncmp(qptr->dbptr->key, key, size))
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200108171544.f7HFihX74733>
