kernel - Fix exit races which can lead to a corrupt p_children list
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 16 Aug 2012 01:11:11 +0000 (18:11 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 16 Aug 2012 01:11:11 +0000 (18:11 -0700)
commit0730ed66e3324415127af9bc0fe9dafa399f4e91
tree8d140d319c234906ccc26ff494beb7df0616a527
parent3c319633569e3d5212b1b525fd5216a542996a9e
kernel - Fix exit races which can lead to a corrupt p_children list

* There are a few races when getting multiple tokens where a threaded
  process is wait*()ing for exiting children from multiple threads
  at once.

  Fix the problem by serializing the operation on a per-child basis,
  and by using PHOLD/PRELE prior to acquiring the child's p_token.
  Then re-check the conditions before accepting the child.

* There is a small chance this will also reduce or fix VM on-exit races
  in i386, as this bug could result in an already-destroyed process
  being pulled off by the racing wait*().  Maybe 25% chance.
sys/kern/kern_exit.c
sys/kern/kern_proc.c
sys/sys/proc.h