From owner-freebsd-bugs Mon Nov 15 0:10: 5 1999 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 4743214C97 for ; Mon, 15 Nov 1999 00:10:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id AAA59802; Mon, 15 Nov 1999 00:10:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: by hub.freebsd.org (Postfix, from userid 32767) id 8E46B14C97; Mon, 15 Nov 1999 00:05:46 -0800 (PST) Message-Id: <19991115080546.8E46B14C97@hub.freebsd.org> Date: Mon, 15 Nov 1999 00:05:46 -0800 (PST) From: dlowe@pootpoot.com To: freebsd-gnats-submit@freebsd.org X-Send-Pr-Version: www-1.0 Subject: misc/14895: portmap bug (when run with -v flag) Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 14895 >Category: misc >Synopsis: portmap bug (when run with -v flag) >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Nov 15 00:10:01 PST 1999 >Closed-Date: >Last-Modified: >Originator: J. David Lowe >Release: 3.0-RELEASE >Organization: pootpoot >Environment: FreeBSD bertha.pootpoot.com 3.0-RELEASE FreeBSD 3.0-RELEASE #3: Sun Oct 31 16:21:08 PST 1999 dlowe@bertha.pootpoot.com:/usr/src/sys/compile/BERTHA i386 >Description: Under certain circumstances, portmap forks endlessly. This was also reported in PR misc/12607, but mistakenly listed as a ypbind() bug. Here's the set of things that cause this problem: portmap actually fork()s before calling getrpcbynumber() and syslog(), to log. Thus the main portmap process can answer requests while a child writes log output. When portmap is run with the -v flag, it logs every incoming request. Under certain circumstances, getrpcent(), called several times by getrpcbynumber(), will call _yp_check(), which in turn may call ypbind(), which in turn talks to portmap. Doh! portmap eventually fills up the process table with logging children. >How-To-Repeat: /etc/rc.conf: nisdomainname="FOO" nis_server_enable="YES" portmap_enable="YES" portmap_flags="-v" You'll need to go into single user mode in order to get the machine back, since rc can't seem to finish with a full process table. >Fix: This is a workaround patch to pmap_check.c, not very nice because it removes one level of verbosity from the supposedly more verbose output of portmap -v. However, it should prevent this from happening, and it illustrates the problem area. As a simpler workaround, don't run portmap with the -v flag, or don't run NIS. Neither solution is perfect. This patch is against "$Id: pmap_check.c,v 1.3 1997/10/09 07:17:11 charnier Exp $" *** pmap_check.c.original Sun Nov 14 23:36:54 1999 --- pmap_check.c Sun Nov 14 23:42:07 1999 *************** *** 242,248 **** if (prognum == 0) { progname = ""; ! } else if ((rpc = getrpcbynumber((int) prognum))) { progname = rpc->r_name; } else { sprintf(progname = progbuf, "%lu", prognum); --- 242,250 ---- if (prognum == 0) { progname = ""; ! /* Ironically, it's not safe to call getrpcbynumber() when ! * verboselog is true, resulting in less verbose logs. */ ! } else if ((! verboselog) && ((rpc = getrpcbynumber((int) prognum)))) { progname = rpc->r_name; } else { sprintf(progname = progbuf, "%lu", prognum); >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message