ftpd: for LIST, open current directory *in the child*
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 27 Jun 2014 10:37:00 +0000 (12:37 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 27 Jun 2014 10:37:00 +0000 (12:37 +0200)
Last change introduced an open fd leak. This is the fix.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ftpd.c

index 839a85d73da273dc8bb4f9017961bb7efdcb31f7..e7cf5f43158a8ef15e65bd6ec457689a1bcb278d 100644 (file)
@@ -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