summaryrefslogtreecommitdiffstats
path: root/libexec/ftpd
diff options
context:
space:
mode:
authormaxim <maxim@FreeBSD.org>2004-09-24 13:21:52 +0000
committermaxim <maxim@FreeBSD.org>2004-09-24 13:21:52 +0000
commitb218fbfba398a6e12e69d299b5d54a1680ba641b (patch)
treee3c02feaa82a40882009e79e9f3ac64d894992ae /libexec/ftpd
parent0894086aa2327afe4a2847350385fd55db6c7e1b (diff)
downloadFreeBSD-src-b218fbfba398a6e12e69d299b5d54a1680ba641b.zip
FreeBSD-src-b218fbfba398a6e12e69d299b5d54a1680ba641b.tar.gz
o Merge rev. 1.5 libexec/ftpd/ftpd.c from DragonflyBSD:
Do not unconditionally fork() after accept(). accept() can return -1 due to an interrupted system call (i.e. SIGCHLD). If we fork in that case ftpd can get into an accept()/SIGCHLD/fork/[fail]/repeat loop. Reported-by: fabian <fabian.duelli@bluewin.ch> Obtained from: DragonflyBSD MFC after: 1 month
Diffstat (limited to 'libexec/ftpd')
-rw-r--r--libexec/ftpd/ftpd.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c
index 46b1101..a721ca2 100644
--- a/libexec/ftpd/ftpd.c
+++ b/libexec/ftpd/ftpd.c
@@ -503,6 +503,7 @@ main(int argc, char *argv[], char **envp)
fd = accept(ctl_sock[i],
(struct sockaddr *)&his_addr,
&addrlen);
+ if (fd >= 0) {
if ((pid = fork()) == 0) {
/* child */
(void) dup2(fd, 0);
@@ -510,6 +511,7 @@ main(int argc, char *argv[], char **envp)
close(ctl_sock[i]);
} else
close(fd);
+ }
}
if (pid == 0)
break;
OpenPOWER on IntegriCloud