diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c --- a/sys/kern/kern_sig.c 2026-08-30 22:26:27.772626378 +0000 +++ b/sys/kern/kern_sig.c 2026-08-30 22:26:27.784626229 +0000 @@ -2305,9 +2305,16 @@ } else { /* * If we get here, the signal must be caught. + * + * ... unless another LWP of this process raced us with + * sigaction(sig, SIG_IGN) between the CURSIG() decision + * in userret() and our read of ps_sigact[] (which is + * done without p_token when the signal was lwp-pending). + * The racer already cleared the pending state; drop the + * signal instead of panicking. */ - KASSERT(action != SIG_IGN && !SIGISMEMBER(lp->lwp_sigmask, sig), - ("postsig action")); + if (action == SIG_IGN || SIGISMEMBER(lp->lwp_sigmask, sig)) + return; /* * Reset the signal handler if asked to