vkernel - Fix semi-random SIGILL crashes under heavy network loads
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 2 Feb 2012 23:17:44 +0000 (15:17 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 2 Feb 2012 23:17:44 +0000 (15:17 -0800)
* SIGIO was being installed with SA_NODEFER, resulting in situations
  under heavy network loads where multiple SIGIOs could stack and cause
  a stack overflow.  This often resulted in the sendsig code in the kernel
  generating a SIGILL to the process after being unable to push a new
  signal context.

* Removing SA_NODEFER appears to solve the problem.

Reported-by: tuxillo
sys/platform/vkernel/platform/kqueue.c
sys/platform/vkernel64/platform/kqueue.c

index 95c72e6..4613cb2 100644 (file)
@@ -83,7 +83,7 @@ init_kqueue(void)
 
        bzero(&sa, sizeof(sa));
        /*sa.sa_mailbox = &mdcpu->gd_mailbox;*/
-       sa.sa_flags = SA_NODEFER;
+       sa.sa_flags = 0;
        sa.sa_handler = kqueuesig;
        sigemptyset(&sa.sa_mask);
        sigaction(SIGIO, &sa, NULL);
index c06d4c5..875639e 100644 (file)
@@ -83,7 +83,7 @@ init_kqueue(void)
 
        bzero(&sa, sizeof(sa));
        /*sa.sa_mailbox = &mdcpu->gd_mailbox;*/
-       sa.sa_flags = SA_NODEFER;
+       sa.sa_flags = 0;
        sa.sa_handler = kqueuesig;
        sigemptyset(&sa.sa_mask);
        sigaction(SIGIO, &sa, NULL);