Date: Fri, 16 May 2008 12:55:58 -0400 From: Mike <deathjestr@gmail.com> To: "Jille Timmermans" <jille@quis.cx> Cc: freebsd-hackers@freebsd.org Subject: Re: Trying (not) to crash with libpthread (6.3-RELEASE) Message-ID: <44b564930805160955r76d6861fo1949c7f4d5b71ca5@mail.gmail.com> In-Reply-To: <482DAB0E.70600@quis.cx> References: <482DAB0E.70600@quis.cx>
next in thread | previous in thread | raw e-mail | index | archive | help
> void > sigcatcher(int sig) { > printf("[%p] signal %d\n", pthread_self(), sig); > printf("Test (probably) succeeded\n"); > fflush(NULL); > success=1; > exit(0); > } Take a look at the man page for sigaction(2). Here's an excerpt: "All functions not in the above lists are considered to be unsafe with respect to signals. That is to say, the behaviour of such functions when called from a signal handler is undefined. In general though, signal handlers should do little more than set a flag; most other actions are not safe." > void * > crashingthread(void *nada) { > /* This will likely crash */ > char *x=malloc(1); > > if(signal(SIGSEGV, sigcatcher)==SIG_ERR) > err(1, "signal(SIGSEGV, catchz0r)"); > > x[666]=0; > > /* HOPEFULLY NOT REACHED (aargh! die harder!) */ > > int i; > for(i=1; 999999>i; i++) > x[i]=0; > > /* NOT REACHED (either killed, or exit()'ed in sigcatcher) */ > abort(); > } Something like *(int*)0 = 0 is probably an easier, more reliable way to crash your program. Maybe not quite as much fun though. ;-)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44b564930805160955r76d6861fo1949c7f4d5b71ca5>