[git commit] start-stop-daemon: do try to close fds > 2

Denys Vlasenko vda.linux at googlemail.com
Mon Apr 29 12:24:07 UTC 2019


commit: https://git.busybox.net/busybox/commit/?id=fa8878bf1fe331df752395cce90da212e25e07b7
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at googlemail.com>
---
 libbb/vfork_daemon_rexec.c | 17 +++++++++--------
 1 file 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)
 	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)) {
 


More information about the busybox-cvs mailing list