diff options
-rw-r--r-- | libbb/vfork_daemon_rexec.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 1aac27b36..65271e84f 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
@@ -263,12 +263,6 @@ void FAST_FUNC bb_daemonize_or_rexec(int flags, char **argv) | |||
263 | if (flags & DAEMON_CHDIR_ROOT) | 263 | if (flags & DAEMON_CHDIR_ROOT) |
264 | xchdir("/"); | 264 | xchdir("/"); |
265 | 265 | ||
266 | if (flags & DAEMON_DEVNULL_STDIO) { | ||
267 | close(0); | ||
268 | close(1); | ||
269 | close(2); | ||
270 | } | ||
271 | |||
272 | fd = open(bb_dev_null, O_RDWR); | 266 | fd = open(bb_dev_null, O_RDWR); |
273 | if (fd < 0) { | 267 | if (fd < 0) { |
274 | /* NB: we can be called as bb_sanitize_stdio() from init | 268 | /* 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) | |||
278 | fd = xopen("/", O_RDONLY); /* don't believe this can fail */ | 272 | fd = xopen("/", O_RDONLY); /* don't believe this can fail */ |
279 | } | 273 | } |
280 | 274 | ||
281 | while ((unsigned)fd < 2) | 275 | if (flags & DAEMON_DEVNULL_STDIO) { |
282 | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ | 276 | xdup2(fd, 0); |
277 | xdup2(fd, 1); | ||
278 | xdup2(fd, 2); | ||
279 | } else { | ||
280 | /* have 0,1,2 open at least to /dev/null */ | ||
281 | while ((unsigned)fd < 2) | ||
282 | fd = dup(fd); | ||
283 | } | ||
283 | 284 | ||
284 | if (!(flags & DAEMON_ONLY_SANITIZE)) { | 285 | if (!(flags & DAEMON_ONLY_SANITIZE)) { |
285 | 286 | ||