git: DragonFly_RELEASE_3_0 kernel - Fix signal masking race assertion panic w/vkernel
Venkatesh Srinivas
vsrinivas at crater.dragonflybsd.org
Thu Apr 12 19:59:30 PDT 2012
commit 53d9c08eb0d6e87cd71c76749423a65f0e4a59e2
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/53d9c08eb0d6e87cd71c76749423a65f0e4a59e2
--
DragonFly BSD source repository
More information about the Commits
mailing list