git: kernel - Fix signal masking race assertion panic w/vkernel
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat Mar 31 18:38:04 PDT 2012
commit 6562e2d87bfc5428fec4426aa343ea315ab88941
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Mar 31 18:30:13 2012 -0700
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
Summary of changes:
sys/platform/pc32/i386/trap.c | 12 +++++++++---
sys/platform/pc64/x86_64/trap.c | 12 +++++++++---
sys/platform/vkernel/i386/trap.c | 12 +++++++++---
sys/platform/vkernel64/x86_64/trap.c | 12 +++++++++---
4 files changed, 36 insertions(+), 12 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/6562e2d87bfc5428fec4426aa343ea315ab88941
--
DragonFly BSD source repository
More information about the Commits
mailing list