Re: file descriptor leak in 5.2-RC

From: Bjoern A. Zeeb <bzeeb-lists_at_lists.zabbadoz.net>
Date: Sun, 28 Dec 2003 18:21:09 +0000 (UTC)
On Sun, 28 Dec 2003, David Malone wrote:

> > I'd call it a surprise if someone after all had a fix within the next 10
> > hours or so.
>
> I'm fairly certain I've found the problem (and, indeed, it looks
> like I introduced it too while changing how falloc works). You loose
> a reference to /dev/null every time you exec a suid program with
> at least one of std{in,out,err} closed. I'm guessing that some part
> of postfix does this.
>
> I believe the patch below will fix the problem. I guess I'm too
> late for you to test it now?

I think it's the correct place...

I could not reproduce the problem on a machine with a kernel
from late september.

Ok, now that we have the patch I can also send a simple program to
test it out to the list ...

Be aware that local users can eat a lot of fds with that ... on
current and 5.2-prereleases

--- end ---
cat > exec-closed123-ping.c <<EOF
#include <unistd.h>

#ifndef MAX_CHILDS
#define MAX_CHILDS              16
#endif

static int _execsetuid()
{
        execl("/sbin/ping", "-c", "1", "localhost", NULL);

        return 1;
}

int main(int argc, char *argv[])
{
        int     i       = 0;
        pid_t   pid;

        (void) close(0);
        (void) close(1);
        (void) close(2);

        while (i++ < MAX_CHILDS) {
                pid = fork();
                switch (pid) {
                        case 0:
                                _exit(_execsetuid());
                }
        }

        return 0;
}
EOF
gcc -Wall exec-closed123-ping.c -o exec-closed123-ping
sysctl kern.openfiles
./exec-closed123-ping
sysctl kern.openfiles
--- end ---

there should be a difference of 16 in kern.openfiles.

-- 
Bjoern A. Zeeb				bzeeb at Zabbadoz dot NeT
56 69 73 69 74				http://www.zabbadoz.net/
Received on Sun Dec 28 2003 - 09:24:18 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:35 UTC