fix sending of SIGTTOU signal in SetForegroundProcessGroup

Changed sendSignal to sendSignalLocked because tg.pidns.owner.mu and tg.signalHandlers.mu
are already locked in SetForegroundProcess

Added a control to verify whether the calling process is ignoring SIGTTOU
before sending the signal
This commit is contained in:
gystemd
2021-08-16 16:33:57 +02:00
parent f971396c65
commit 7c5ab794f1
+5 -3
View File
@@ -511,9 +511,11 @@ func (tg *ThreadGroup) SetForegroundProcessGroup(tty *TTY, pgid ProcessGroupID)
return -1, linuxerr.EPERM
}
//if the calling process is a member of a background group, a SIGTTOU signal is sent to all members of this background process group.
if tg.processGroup.session.foreground.id != tg.processGroup.id {
tg.processGroup.SendSignal(&linux.SignalInfo{Signo: int32(linux.SIGTTOU)})
sa:= tg.signalHandlers.actions[linux.SIGTTOU]
//if the calling process is a member of a background group, a SIGTTOU
//signal is sent to all members of this background process group.
if tg.processGroup.id != tg.processGroup.session.foreground.id && sa.Handler!=linux.SIG_IGN{
tg.leader.sendSignalLocked(SignalInfoPriv(linux.SIGTTOU),true)
}
tg.processGroup.session.foreground.id = pgid