From: Todd C. Miller Date: Wed, 4 May 2016 20:13:44 +0000 (-0600) Subject: In dispatch_signal() for stopped processes check for tcgetpgrp() X-Git-Tag: SUDO_1_8_17^2~119 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c70da6dcdfad1b5512f6350e57365e98dea19d55;p=sudo In dispatch_signal() for stopped processes check for tcgetpgrp() returning -1. Also change checks from "saved_pgrp != -1" to "fd != -1". Coverity CID 104098. --- diff --git a/src/exec.c b/src/exec.c index e10a567ab..f38128606 100644 --- a/src/exec.c +++ b/src/exec.c @@ -565,6 +565,12 @@ dispatch_signal(struct sudo_event_base *evbase, pid_t child, int fd = open(_PATH_TTY, O_RDWR|O_NOCTTY, 0); if (fd != -1) { saved_pgrp = tcgetpgrp(fd); + if (saved_pgrp == -1) { + close(fd); + fd = -1; + } + } + if (saved_pgrp != -1) { /* * Child was stopped trying to access controlling * terminal. If the child has a different pgrp @@ -605,7 +611,7 @@ dispatch_signal(struct sudo_event_base *evbase, pid_t child, SIGTSTP); } } - if (fd != -1) { + if (saved_pgrp != -1) { /* * Restore command's process group if different. * Otherwise, we cannot resume some shells.