public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 2.6.x signal handler bug
@ 2004-06-25 23:56 Paul Maurides
  2004-06-26  0:07 ` Andrew Morton
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Paul Maurides @ 2004-06-25 23:56 UTC (permalink / raw)
  To: linux-kernel

The bug has been reproduced successfully using the following program
on kernel 2.6.5 and 2.6.7, and probably affects any other 2.6 kernel.

Kernel 2.4 produce the correct behavior, an endless loop of handled 
signals, but on kernel 2.6 the program segfaults.

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

volatile int len;
volatile int real;
volatile int caught;
jmp_buf env;

void catcher(int sig){
    signal(SIGSEGV,catcher);
    printf("requested: %9d malloced: %9d\n",len,real);
    longjmp(env, 1);
}

int main(){
    char* p=0;
    len = 0;
    signal(SIGSEGV,catcher);

    setjmp(env);
    len++;
    free(p);
    p = malloc(len);
    real = 0;
    while(1){
        p[real] = 0;
        real++;
    }
    return 0;
}

PS. I'm not subscribed to this list, so please include me in the cc


^ permalink raw reply	[flat|nested] 12+ messages in thread
* Re: 2.6.x signal handler bug
@ 2004-06-26 14:33 Steve G
  2004-06-26 16:05 ` Davide Libenzi
  0 siblings, 1 reply; 12+ messages in thread
From: Steve G @ 2004-06-26 14:33 UTC (permalink / raw)
  To: linux-kernel

Hi,

I looked at the test program and do not see anything wrong with the code.
Contrary to what's already been said in this thread, sigsetjmp/siglongjmp only
differ in that they restore the signal context. This should never cause a
segfault. 

Regarding re-entrancy, longjmp is stated as one of only 2 ways to exit signal
handlers. Also, while the printf is not signal safe, it is not your problem
either. BTW, this mechanism is used by some servers to prevent crashes even in
the face of big problems. xinetd for one does this...so its important to have
working.

I ran the test program on my machine under 2.4 and all works as expected. Under
2.6, it definitely segfaults. I tried using Electric Fence and valgrind to trap
the error. Neither one could.

In summary, the program is valid and real world servers do this kind of thing. It
does segfault under 2.6.

Hope this helps...
-Steve Grubb

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2004-06-28 21:57 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-25 23:56 2.6.x signal handler bug Paul Maurides
2004-06-26  0:07 ` Andrew Morton
2004-06-26  1:33 ` David Wagner
2004-06-28 21:56 ` Jörn Engel
  -- strict thread matches above, loose matches on Subject: below --
2004-06-26 14:33 Steve G
2004-06-26 16:05 ` Davide Libenzi
2004-06-27 22:16   ` Andries Brouwer
2004-06-27 22:45     ` Davide Libenzi
2004-06-27 22:51       ` Davide Libenzi
2004-06-28  2:01         ` Steve G
2004-06-28 11:26         ` Steve G
2004-06-28 14:56           ` Davide Libenzi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox