Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Jan 2000 09:58:24 -0800
From:      Matthew Reimer <mreimer@vpop.net>
To:        freebsd-hackers@freebsd.org
Subject:   Re: RLIMIT_NPROC can be exceeded via setuid/exec
Message-ID:  <38889E40.B8B3F4A@vpop.net>
References:  <lists.freebsd.hackers.3887A157.E30E31AE@vpop.net> <lists.freebsd.hackers.Pine.BSF.4.21.0001210031570.51684-100000@resnet.uoregon.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
I solved the problem by making a small syscall KLD get_uid_nproc that
just returns the result of

	chgproccnt(SCARG(uap, uid), 0);

and by having suexec use this syscall to determine whether or not to
exec the CGI:

    stat.version = sizeof(stat);
    mod_id = modfind("get_uid_nproc");
    if ((mod_id > 0) && (modstat(mod_id, &stat) == 0)) {

        getrlimit(RLIMIT_NPROC, &rlim);

        n_procs = syscall(stat.data.intval, uid);

        if (n_procs >= rlim.rlim_cur) {
            printf("Content-type: text/html\n\n"
                   "Too many processes running for this user.\n");
            log_err("Process limit exceeded (%ld)\n", n_procs);
            exit(122);
        }
    }

So now RLimitNPROC in Apache VirtualHost sections really works, even
with suexec.

But my question remains: should setuid() fail if the target uid's
process count would be exceeded? If so, I wouldn't need this
work-around.

Matt


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?38889E40.B8B3F4A>