From: Remi Tricot-Le Breton Date: Tue, 28 Oct 2025 17:00:42 +0000 (+0100) Subject: BUG/MINOR: init: Do not close previously created fd in stdio_quiet X-Git-Tag: v3.3-dev11~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c606ff45a0cab8f08a0b06df17737ec309cf4170;p=thirdparty%2Fhaproxy.git BUG/MINOR: init: Do not close previously created fd in stdio_quiet During init we were calling 'stdio_quiet' and passing the previously created 'devnullfd' file descriptor. But the 'stdio_quiet' was also closed afterwards which raised an error (EBADF). If we keep from closing FDs that were opened outside of the 'stdio_quiet' function we will let the caller manage its FD and avoid double close calls. This patch can be backported to all stable branches. --- diff --git a/src/haproxy.c b/src/haproxy.c index 8127f0e04..1a43ae6e0 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -893,8 +893,11 @@ static void dump(struct sig_handler *sh) */ void stdio_quiet(int fd) { - if (fd < 0) + int close_fd = 0; + if (fd < 0) { fd = open("/dev/null", O_RDWR, 0); + close_fd = 1; + } if (fd > -1) { fclose(stdin); @@ -904,7 +907,7 @@ void stdio_quiet(int fd) dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); - if (fd > 2) + if (fd > 2 && close_fd) close(fd); return; }