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:
@@ -565,6 +565,12 @@ dispatch_signal(struct sudo_event_base *evbase, pid_t child,
|
|||||||
int fd = open(_PATH_TTY, O_RDWR|O_NOCTTY, 0);
|
int fd = open(_PATH_TTY, O_RDWR|O_NOCTTY, 0);
|
||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
saved_pgrp = tcgetpgrp(fd);
|
saved_pgrp = tcgetpgrp(fd);
|
||||||
|
if (saved_pgrp == -1) {
|
||||||
|
close(fd);
|
||||||
|
fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (saved_pgrp != -1) {
|
||||||
/*
|
/*
|
||||||
* Child was stopped trying to access controlling
|
* Child was stopped trying to access controlling
|
||||||
* terminal. If the child has a different pgrp
|
* terminal. If the child has a different pgrp
|
||||||
@@ -605,7 +611,7 @@ dispatch_signal(struct sudo_event_base *evbase, pid_t child,
|
|||||||
SIGTSTP);
|
SIGTSTP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fd != -1) {
|
if (saved_pgrp != -1) {
|
||||||
/*
|
/*
|
||||||
* Restore command's process group if different.
|
* Restore command's process group if different.
|
||||||
* Otherwise, we cannot resume some shells.
|
* Otherwise, we cannot resume some shells.
|
||||||
|
Reference in New Issue
Block a user