start-stop-daemon: do try to close fds > 2
No binary (build failed)
—
(log yok)
| @@ -263,12 +263,6 @@ void FAST_FUNC bb_daemonize_or_rexec(int flags, char **argv) | |
| if (flags & DAEMON_CHDIR_ROOT) | |
| xchdir("/"); | |
| - | if (flags & DAEMON_DEVNULL_STDIO) { |
| - | close(0); |
| - | close(1); |
| - | close(2); |
| - | } |
| - | |
| fd = open(bb_dev_null, O_RDWR); | |
| if (fd < 0) { | |
| /* NB: we can be called as bb_sanitize_stdio() from init | |
| @@ -278,8 +272,15 @@ void FAST_FUNC bb_daemonize_or_rexec(int flags, char **argv) | |
| fd = xopen("/", O_RDONLY); /* don't believe this can fail */ | |
| } | |
| - | while ((unsigned)fd < 2) |
| - | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ |
| + | if (flags & DAEMON_DEVNULL_STDIO) { |
| + | xdup2(fd, 0); |
| + | xdup2(fd, 1); |
| + | xdup2(fd, 2); |
| + | } else { |
| + | /* have 0,1,2 open at least to /dev/null */ |
| + | while ((unsigned)fd < 2) |
| + | fd = dup(fd); |
| + | } |
| if (!(flags & DAEMON_ONLY_SANITIZE)) { | |