aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbb/vfork_daemon_rexec.c17
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