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.
This commit is contained in:
Remi Tricot-Le Breton 2025-10-28 18:00:42 +01:00 committed by William Lallemand
parent ad9a24ee55
commit c606ff45a0

View File

@ -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;
}