From: Todd C. Miller Date: Fri, 5 May 2017 20:45:35 +0000 (-0600) Subject: Fix a hang introduced in the last commit. Don't close the pty slave X-Git-Tag: SUDO_1_8_20^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e18a5c7d74ad4a73e571898bfc7e31b7f98f8277;p=sudo Fix a hang introduced in the last commit. Don't close the pty slave until after we have the controlling tty. --- diff --git a/src/exec_monitor.c b/src/exec_monitor.c index f8a21a5ca..b0cb389a7 100644 --- a/src/exec_monitor.c +++ b/src/exec_monitor.c @@ -408,8 +408,6 @@ exec_cmnd_pty(struct command_details *details, bool foreground, int errfd) if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE]) close(io_fds[SFD_STDERR]); } - if (io_fds[SFD_SLAVE] != -1) - close(io_fds[SFD_SLAVE]); /* Wait for parent to grant us the tty if we are foreground. */ if (foreground && !ISSET(details->flags, CD_EXEC_BG)) { @@ -418,6 +416,10 @@ exec_cmnd_pty(struct command_details *details, bool foreground, int errfd) nanosleep(&ts, NULL); } + /* Done with the pty slave, don't leak it. */ + if (io_fds[SFD_SLAVE] != -1) + close(io_fds[SFD_SLAVE]); + /* Execute command; only returns on error. */ exec_cmnd(details, errfd);