start-stop-daemon: do try to close fds > 2

sh -c 'exec 3>&1; exec start-stop-daemon -S -b -x /bin/sleep -- 123'

now closes fd 3.

function                                             old     new   delta
bb_daemonize_or_rexec                                183     192      +9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 9/0)                 Total: 9 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2019-04-29 14:24:07 +02:00
parent 13f4204561
commit fa8878bf1f

View File

@ -263,12 +263,6 @@ void FAST_FUNC bb_daemonize_or_rexec(int flags, char **argv)
if (flags & DAEMON_CHDIR_ROOT) if (flags & DAEMON_CHDIR_ROOT)
xchdir("/"); xchdir("/");
if (flags & DAEMON_DEVNULL_STDIO) {
close(0);
close(1);
close(2);
}
fd = open(bb_dev_null, O_RDWR); fd = open(bb_dev_null, O_RDWR);
if (fd < 0) { if (fd < 0) {
/* NB: we can be called as bb_sanitize_stdio() from init /* 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 */ fd = xopen("/", O_RDONLY); /* don't believe this can fail */
} }
while ((unsigned)fd < 2) if (flags & DAEMON_DEVNULL_STDIO) {
fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ 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)) { if (!(flags & DAEMON_ONLY_SANITIZE)) {