In dispatch_signal() for stopped processes check for tcgetpgrp()

returning -1.  Also change checks from "saved_pgrp != -1" to
"fd != -1".  Coverity CID 104098.
This commit is contained in:
Todd C. Miller
2016-05-04 14:13:44 -06:00
parent 2cd22f2906
commit c70da6dcdf

View File

@@ -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.