]> granicus.if.org Git - sudo/commitdiff
In pty_close() we still need to check whether the pty master and
authorTodd C. Miller <Todd.Miller@sudo.ws>
Tue, 27 Mar 2018 22:00:08 +0000 (16:00 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Tue, 27 Mar 2018 22:00:08 +0000 (16:00 -0600)
slave fds are open before closing them.  When no tty is present but
we are I/O logging pty_close() will be called when there is no
actual pty in use.

src/exec_pty.c

index 396c3629cf70fb0247ec240f4f59c749b02e05f3..7adb0a389293d9a6106c50ee015d05b90fa965c8 100644 (file)
@@ -755,7 +755,8 @@ pty_close(struct command_status *cstat)
     debug_decl(pty_close, SUDO_DEBUG_EXEC);
 
     /* Close the pty slave first so reads from the master don't block. */
-    close(io_fds[SFD_SLAVE]);
+    if (io_fds[SFD_SLAVE] != -1)
+       close(io_fds[SFD_SLAVE]);
 
     /* Flush any remaining output (the plugin already got it). */
     if (io_fds[SFD_USERTTY] != -1) {
@@ -786,7 +787,8 @@ pty_close(struct command_status *cstat)
        utmp_logout(slavename, cstat->type == CMD_WSTATUS ? cstat->val : 0);
 
     /* Close pty master. */
-    close(io_fds[SFD_MASTER]);
+    if (io_fds[SFD_MASTER] != -1)
+       close(io_fds[SFD_MASTER]);
 
     debug_return;
 }