kern/156352: misleading "maxproc limit exceeded by uid" message

Petr Lampa lampa at fit.vutbr.cz
Tue Apr 12 13:20:10 UTC 2011


>Number:         156352
>Category:       kern
>Synopsis:       misleading "maxproc limit exceeded by uid" message
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Apr 12 13:20:10 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Petr Lampa
>Release:        8.2-STABLE
>Organization:
BUT FIT
>Environment:
FreeBSD xxxx 8.2-STABLE FreeBSD 8.2-STABLE #35: Fri Feb 25 22:05:28 CET 2011 
>Description:
The message 

maxproc limit exceeded by uid xxxx, please see tuning(7) and login.conf(5) 

can be misleading when user hits his process limit. In this case notice about maxproc and tuning is pointless, the message shoud be rather:

user xxxx process limit exceeded, see ulimit -u and login.conf

Short history.

Rev 1.171 (2002) changed handling of user proclimit to "goto fail" - the same as for maxproc case. Rev 1.203 (2003) added the message with this comment:
----
Add a ratelimited message of the form
"maxproc limit exceeded by uid %i, please see tuning(7) and login.conf(5)."

Which will be triggered whenever a user hits his/her maxproc limit or
the systemwide maxproc limit is reached.
----


>How-To-Repeat:

>Fix:
--- kern_fork.c.old     2011-04-12 15:04:57.000000000 +0200
+++ kern_fork.c 2011-04-12 15:08:48.000000000 +0200
@@ -216,6 +216,7 @@
        struct vmspace *vm2;
        vm_ooffset_t mem_charged;
        int error;
+       const char *msg;

        /* Can't copy and clear. */
        if ((flags & (RFFDG|RFCFDG)) == (RFFDG|RFCFDG))
@@ -339,6 +340,7 @@
        sx_xlock(&allproc_lock);
        if ((nprocs >= maxproc - 10 && priv_check_cred(td->td_ucred,
            PRIV_MAXPROC, 0) != 0) || nprocs >= maxproc) {
+               msg = "maxproc limit exceeded by uid %i, please see tuning(7) and login.conf(5).\n";
                error = EAGAIN;
                goto fail;
        }
@@ -359,6 +361,7 @@
                PROC_UNLOCK(p1);
        }
        if (!ok) {
+               msg = "user %i process limit exceeded, please see ulimit -u and login.conf(5).\n";
                error = EAGAIN;
                goto fail;
        }
@@ -803,8 +806,7 @@
 fail:
        sx_sunlock(&proctree_lock);
        if (ppsratecheck(&lastfail, &curfail, 1))
-               printf("maxproc limit exceeded by uid %i, please see tuning(7) and login.conf(5).\n",
-                   td->td_ucred->cr_ruid);
+               printf(msg, td->td_ucred->cr_ruid);
        sx_xunlock(&allproc_lock);
 #ifdef MAC
        mac_proc_destroy(newproc);


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list