git: DragonFly_RELEASE_3_0 kernel - Fix signal masking race assertion panic w/vkernel

Venkatesh Srinivas vsrinivas at
Thu Apr 12 19:59:30 PDT 2012

commit 53d9c08eb0d6e87cd71c76749423a65f0e4a59e2
Author: Matthew Dillon <dillon at>
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(-)

DragonFly BSD source repository

More information about the Commits mailing list