summaryrefslogtreecommitdiff
path: root/usr.sbin/slowcgi
diff options
context:
space:
mode:
authorFlorian Obser <florian@cvs.openbsd.org>2013-10-21 18:19:28 +0000
committerFlorian Obser <florian@cvs.openbsd.org>2013-10-21 18:19:28 +0000
commita7bfff0a49c2d23c233ddd63cc9e1467fea0a4a5 (patch)
tree8f00c7b117af638314182ad83ade7f62294bff9d /usr.sbin/slowcgi
parentc07f0430a20d4edc0c5604c0d1bb7a874ae7b6eb (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.c18
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 */