svn commit: r324935 - stable/11/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Mon Oct 23 19:15:52 UTC 2017
Author: kib
Date: Mon Oct 23 19:15:51 2017
New Revision: 324935
URL: https://svnweb.freebsd.org/changeset/base/324935
Log:
MFC r324671:
Re-evaluate thread' signal mask after ptracestop().
Modified:
stable/11/sys/kern/kern_sig.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/kern/kern_sig.c
==============================================================================
--- stable/11/sys/kern/kern_sig.c Mon Oct 23 19:03:36 2017 (r324934)
+++ stable/11/sys/kern/kern_sig.c Mon Oct 23 19:15:51 2017 (r324935)
@@ -2888,15 +2888,32 @@ issignal(struct thread *td)
mtx_lock(&ps->ps_mtx);
/*
- * Keep looking if the debugger discarded the signal
- * or replaced it with a masked signal.
- *
- * If the traced bit got turned off, go back up
- * to the top to rescan signals. This ensures
- * that p_sig* and p_sigact are consistent.
+ * Keep looking if the debugger discarded or
+ * replaced the signal.
*/
- if (sig == 0 || (p->p_flag & P_TRACED) == 0)
+ if (sig == 0)
continue;
+
+ /*
+ * If the signal became masked, re-queue it.
+ */
+ if (SIGISMEMBER(td->td_sigmask, sig)) {
+ ksi.ksi_flags |= KSI_HEAD;
+ sigqueue_add(&p->p_sigqueue, sig, &ksi);
+ continue;
+ }
+
+ /*
+ * If the traced bit got turned off, requeue
+ * the signal and go back up to the top to
+ * rescan signals. This ensures that p_sig*
+ * and p_sigact are consistent.
+ */
+ if ((p->p_flag & P_TRACED) == 0) {
+ ksi.ksi_flags |= KSI_HEAD;
+ sigqueue_add(queue, sig, &ksi);
+ continue;
+ }
}
prop = sigprop(sig);
More information about the svn-src-stable-11
mailing list