From: Felix Fietkau Date: Sun, 1 Dec 2013 09:28:52 +0000 (+0100) Subject: netifd: fix process stdin/stdout/stderr when the pipe fds overlap with standard fds X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=fba9c88b995957b8109889f4747c7fe942fd5812;p=project%2Fnetifd.git netifd: fix process stdin/stdout/stderr when the pipe fds overlap with standard fds Signed-off-by: Felix Fietkau --- diff --git a/main.c b/main.c index 92c6f49..d8cb17f 100644 --- a/main.c +++ b/main.c @@ -143,6 +143,8 @@ netifd_start_process(const char **argv, char **env, struct netifd_process *proc) goto error; if (!pid) { + int i; + if (env) { while (*env) { putenv(*env); @@ -152,12 +154,17 @@ netifd_start_process(const char **argv, char **env, struct netifd_process *proc) if (proc->dir_fd >= 0) fchdir(proc->dir_fd); - dup2(pfds[1], 0); - dup2(pfds[1], 1); - dup2(pfds[1], 2); - close(pfds[0]); - close(pfds[1]); + + for (i = 0; i <= 2; i++) { + if (pfds[1] == i) + continue; + + dup2(pfds[1], i); + } + + if (pfds[1] > 2) + close(pfds[1]); execvp(argv[0], (char **) argv); exit(127);