kernel - Fix signal masking race assertion panic w/vkernel
* sigsuspend() and pselect() record the old signal mask in order to
allow an interrupting signal to run its handler before the old mask
is restored.
* When multiple threads are present a race can ensue where another thread
changes the signal handler after sigsuspend() or pselect() have interrupted,
but before they are able to process the signal.
* If the signal is no longer enabled the old signal mask is not restored
on system call return, resulting in an assertion and panic.
* Fix the problem by checking the flag and restoring the old signal mask
on return (rather than asserting when the flag is found to be non-zero
on return).
Reported-by: Venkatesh Srinivas