From b218fbfba398a6e12e69d299b5d54a1680ba641b Mon Sep 17 00:00:00 2001 From: maxim Date: Fri, 24 Sep 2004 13:21:52 +0000 Subject: 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 Obtained from: DragonflyBSD MFC after: 1 month --- libexec/ftpd/ftpd.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libexec/ftpd/ftpd.c') 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; -- cgit v1.1