Subject: kern_fork.c - off by two error ???
To: Peter Galbavy <>
From: Dirk Steinberg <>
List: current-users
Date: 02/22/1994 09:16:04
>>>>> "Peter" == Peter Galbavy <> writes:

    Peter> OK, I have stared at this for ages, and it lookes like the
    Peter> "+" should be a "-". Or will someone expain I should see
    Peter> the pattern. It's like one of those dot stereorams :-)

   >From kern/kern_fork.c:

	 * Although process entries are dynamically entries,
	 * we still keep a global limit on the maximum number
	 * we will create.  Don't allow a nonprivileged user
	 * to exceed its current limit or to bring us within one
	 * of the global limit; don't let root exceed the limit.
	 * nprocs is the current number of processes,
	 * maxproc is the limit.
	if ((nprocs >= maxproc && uid != 0)
	    || nprocs >= maxproc + 1) {
				 ^--------- shouldn't this be "-" ???
		return (EAGAIN);

Regular users are checked against maxproc, root is checked against
maxproc + 1, so he is allowed to use one more process. This is
correct. I don't know the exact definition of nprocs and maxproc, but
the test indeed looks strange. I would guess it should look like this:

	if ((nprocs >= maxproc - 1 && uid != 0)
	    || nprocs >= maxproc) {
		return (EAGAIN);

But then, as said in the comment, processes are dynamic entities, so
it probably doesn't matter much. The semantic of root getting the last
process is correct anyway.

    Peter> I really have tried to work this out before posting, so I
    Peter> think I may be right...


Dirk W. Steinberg - RWTH Aachen - Internet email:
Aachen University of Technology / IS2-Integrated Systems in Signal Processing
Rhein.Westf.Tech.Hochsch. Aachen / Integrierte Systeme der Signalverarbeitung
Templergraben 55 / D-52056 Aachen / phone:+49 241 807879 / fax:+49 241 807631
Home address: Kleikstr. 63, D-52134 Herzogenrath,Germany/phone: +49 2406 7225