Author: kib
Date: Thu Feb 20 21:25:12 2020
New Revision: 358182
URL: https://svnweb.freebsd.org/changeset/base/358182

Log:
  Fix a bug in r358168, do not call sigfastblock_setpend() under a mutex.
  
  PR:   244250
  Reported and tested by:       lwhsu
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/kern/subr_trap.c

Modified: head/sys/kern/subr_trap.c
==============================================================================
--- head/sys/kern/subr_trap.c   Thu Feb 20 21:12:10 2020        (r358181)
+++ head/sys/kern/subr_trap.c   Thu Feb 20 21:25:12 2020        (r358182)
@@ -326,21 +326,23 @@ ast(struct trapframe *framep)
        if (flags & TDF_NEEDSIGCHK || p->p_pendingcnt > 0 ||
            !SIGISEMPTY(p->p_siglist)) {
                sigfastblock_fetch(td);
-               PROC_LOCK(p);
-               mtx_lock(&p->p_sigacts->ps_mtx);
                if ((td->td_pflags & TDP_SIGFASTBLOCK) != 0 &&
                    td->td_sigblock_val != 0) {
                        sigfastblock_setpend(td);
+                       PROC_LOCK(p);
                        reschedule_signals(p, fastblock_mask,
-                           SIGPROCMASK_PS_LOCKED | SIGPROCMASK_FASTBLK);
+                           SIGPROCMASK_FASTBLK);
+                       PROC_UNLOCK(p);
                } else {
+                       PROC_LOCK(p);
+                       mtx_lock(&p->p_sigacts->ps_mtx);
                        while ((sig = cursig(td)) != 0) {
                                KASSERT(sig >= 0, ("sig %d", sig));
                                postsig(sig);
                        }
+                       mtx_unlock(&p->p_sigacts->ps_mtx);
+                       PROC_UNLOCK(p);
                }
-               mtx_unlock(&p->p_sigacts->ps_mtx);
-               PROC_UNLOCK(p);
        }
 
        /*
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to