diff options
author | Florian Obser <florian@cvs.openbsd.org> | 2013-10-21 18:19:28 +0000 |
---|---|---|
committer | Florian Obser <florian@cvs.openbsd.org> | 2013-10-21 18:19:28 +0000 |
commit | a7bfff0a49c2d23c233ddd63cc9e1467fea0a4a5 (patch) | |
tree | 8f00c7b117af638314182ad83ade7f62294bff9d /usr.sbin/slowcgi | |
parent | c07f0430a20d4edc0c5604c0d1bb7a874ae7b6eb (diff) |
Do not leak fds in fork(2) error path.
pointed out by deraadt@
Diffstat (limited to 'usr.sbin/slowcgi')
-rw-r--r-- | usr.sbin/slowcgi/slowcgi.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/usr.sbin/slowcgi/slowcgi.c b/usr.sbin/slowcgi/slowcgi.c index a0c0aecdd8d..1a0b819c2dd 100644 --- a/usr.sbin/slowcgi/slowcgi.c +++ b/usr.sbin/slowcgi/slowcgi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: slowcgi.c,v 1.22 2013/10/21 18:17:58 florian Exp $ */ +/* $OpenBSD: slowcgi.c,v 1.23 2013/10/21 18:19:27 florian Exp $ */ /* * Copyright (c) 2013 David Gwynne <dlg@openbsd.org> * Copyright (c) 2013 Florian Obser <florian@openbsd.org> @@ -827,7 +827,23 @@ exec_cgi(struct request *c) switch (pid = fork()) { case -1: + c->script_status = errno; + lwarn("fork"); + + close(s_in[0]); + close(s_out[0]); + close(s_err[0]); + + close(s_in[1]); + close(s_out[1]); + close(s_err[1]); + + c->stdin_fd_closed = c->stdout_fd_closed = + c->stderr_fd_closed = 1; + c->script_flags = (STDOUT_DONE | STDERR_DONE | SCRIPT_DONE); + + create_end_record(c); return; case 0: /* Child process */ |