From owner-freebsd-stable Thu Sep 14 15:22:29 2000 Delivered-To: freebsd-stable@freebsd.org Received: from gatekeeper.tsc.tdk.com (gatekeeper.tsc.tdk.com [207.113.159.21]) by hub.freebsd.org (Postfix) with ESMTP id 475C237B422 for ; Thu, 14 Sep 2000 15:22:25 -0700 (PDT) Received: from imap.gv.tsc.tdk.com (imap.gv.tsc.tdk.com [192.168.241.198]) by gatekeeper.tsc.tdk.com (8.8.8/8.8.8) with ESMTP id PAA15034; Thu, 14 Sep 2000 15:22:22 -0700 (PDT) (envelope-from gdonl@tsc.tdk.com) Received: from salsa.gv.tsc.tdk.com (salsa.gv.tsc.tdk.com [192.168.241.194]) by imap.gv.tsc.tdk.com (8.9.3/8.9.3) with ESMTP id PAA89145; Thu, 14 Sep 2000 15:22:21 -0700 (PDT) (envelope-from Don.Lewis@tsc.tdk.com) Received: (from gdonl@localhost) by salsa.gv.tsc.tdk.com (8.8.5/8.8.5) id PAA27308; Thu, 14 Sep 2000 15:22:20 -0700 (PDT) From: Don Lewis Message-Id: <200009142222.PAA27308@salsa.gv.tsc.tdk.com> Date: Thu, 14 Sep 2000 15:22:20 -0700 In-Reply-To: <200009142207.PAA27239@salsa.gv.tsc.tdk.com> References: <14785.12095.673316.885249@onceler.kciLink.com> <200009142046.NAA26980@salsa.gv.tsc.tdk.com> <14785.15822.898420.198946@onceler.kciLink.com> <200009142207.PAA27239@salsa.gv.tsc.tdk.com> X-Mailer: Mail User's Shell (7.2.6 beta(5) 10/07/98) To: Don Lewis , Vivek Khera , stable@FreeBSD.ORG Subject: Re: negative proccnt Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Sep 14, 3:07pm, Don Lewis wrote: } Subject: Re: negative proccnt } I believe the problem is here in fork1(): } } /* } * Increment the count of procs running with this uid. Don't allow } * a nonprivileged user to exceed their current limit. } */ } ok = chgproccnt(p1->p_cred->p_uidinfo, 1, } p1->p_rlimit[RLIMIT_NPROC].rlim_cur); } if (uid != 0 && !ok) { } /* } * Back out the process count } */ } nprocs--; } return (EAGAIN); } } } } If chgproccnt() failes because the limit would be exceeded, the } proccnt won't be incremented, but the following test will let } the fork happen anyway if uid is 0. The eventual exit() decrements } proccnt and may result in an underflow. } } As a workaround, you can bump the process limit for root and/or reap } processes more often. ... or you can try this patch: Index: kern_fork.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v retrieving revision 1.72.2.4 diff -u -r1.72.2.4 kern_fork.c --- kern_fork.c 2000/09/07 19:13:36 1.72.2.4 +++ kern_fork.c 2000/09/14 22:19:59 @@ -246,8 +246,8 @@ * a nonprivileged user to exceed their current limit. */ ok = chgproccnt(p1->p_cred->p_uidinfo, 1, - p1->p_rlimit[RLIMIT_NPROC].rlim_cur); - if (uid != 0 && !ok) { + (uid != 0) ? p1->p_rlimit[RLIMIT_NPROC].rlim_cur : 0); + if (!ok) { /* * Back out the process count */ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message