Author: jilles
Date: Fri Dec 28 13:32:14 2018
New Revision: 342572
URL: https://svnweb.freebsd.org/changeset/base/342572

Log:
  pfind, pfind_any: Correct zombie logic
  
  SVN r340744 erroneously changed pfind() to return any process including
  zombies and pfind_any() to return only non-zombie processes.
  
  In particular, this caused kill() on a zombie process to fail with [ESRCH].
  There is no direct test case for this but /usr/tests/bin/sh/builtins/kill1.0
  occasionally triggers it (as reported by lwhsu).
  
  Conversely, returning zombies from pfind() seems likely to violate
  invariants and cause panics, but I have not looked at this.
  
  PR:           233646
  Reviewed by:  mjg, kib, ngie
  Differential Revision:        https://reviews.freebsd.org/D18665

Modified:
  head/sys/kern/kern_proc.c

Modified: head/sys/kern/kern_proc.c
==============================================================================
--- head/sys/kern/kern_proc.c   Fri Dec 28 10:10:16 2018        (r342571)
+++ head/sys/kern/kern_proc.c   Fri Dec 28 13:32:14 2018        (r342572)
@@ -388,7 +388,7 @@ _pfind(pid_t pid, bool zombie)
                if (p->p_pid == pid) {
                        PROC_LOCK(p);
                        if (p->p_state == PRS_NEW ||
-                           (zombie && p->p_state == PRS_ZOMBIE)) {
+                           (!zombie && p->p_state == PRS_ZOMBIE)) {
                                PROC_UNLOCK(p);
                                p = NULL;
                        }
_______________________________________________
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