[git commit] ftpd: for LIST, open current directory *in the child*

Denys Vlasenko vda.linux at googlemail.com
Fri Jun 27 10:37:00 UTC 2014


commit: http://git.busybox.net/busybox/commit/?id=27c290f7f29fc57385d53893bfd7301db4708e9c
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Last change introduced an open fd leak. This is the fix.

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/ftpd.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/networking/ftpd.c b/networking/ftpd.c
index 839a85d..e7cf5f4 100644
--- a/networking/ftpd.c
+++ b/networking/ftpd.c
@@ -620,9 +620,7 @@ popen_ls(const char *opt)
 	const char *argv[5];
 	struct fd_pair outfd;
 	pid_t pid;
-#if !BB_MMU
-	int cur_fd = xopen(".", O_RDONLY | O_DIRECTORY);
-#endif
+
 	argv[0] = "ftpd";
 	argv[1] = opt; /* "-l" or "-1" */
 	argv[2] = "--";
@@ -646,6 +644,9 @@ popen_ls(const char *opt)
 	/*fflush_all(); - so far we dont use stdio on output */
 	pid = BB_MMU ? xfork() : xvfork();
 	if (pid == 0) {
+#if !BB_MMU
+		int cur_fd;
+#endif
 		/* child */
 		/* NB: close _first_, then move fd! */
 		close(outfd.rd);
@@ -660,6 +661,7 @@ popen_ls(const char *opt)
 		/* memset(&G, 0, sizeof(G)); - ls_main does it */
 		exit(ls_main(ARRAY_SIZE(argv) - 1, (char**) argv));
 #else
+		cur_fd = xopen(".", O_RDONLY | O_DIRECTORY);
 		/* On NOMMU, we want to execute a child - copy of ourself
 		 * in order to unblock parent after vfork.
 		 * In chroot we usually can't re-exec. Thus we escape


More information about the busybox-cvs mailing list