lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
From: silvio at big.net.au (silvio@....net.au) Subject: Gl1bC L1nuxThreadz ADV1SORY, was Re: bombings in bali On Mon, Oct 14, 2002 at 05:18:06PM -0500, Ron DuFresne wrote: > > Of course, none of this is relevant to the full disclosure list, nor even > unix-virus, though, being your own list you are able to pushout whatever > you wish. > > This spam needs to be filtered if it persists also. I filter everything except CNN, since its the my source of current world events. > Thanks, > > Ron DuFresne Erm.. SORRY Pops! -- [ for curiosity sake.. i have not forwarded this to unix-virus, only f-d ] hopefully, i wont pump up the spam meter with this post, though i can't garauntee it! THREATCON at 0.3 now --> glibc-2.1.3/linuxthreads/signals.c int sigaction(int sig, const struct sigaction * act, struct sigaction * oact) { struct sigaction newact; struct sigaction *newactp; if (sig == __pthread_sig_restart || sig == __pthread_sig_cancel || (sig == __pthread_sig_debug && __pthread_sig_debug > 0)) return EINVAL; if (act) { newact = *act; if (act->sa_handler != SIG_IGN && act->sa_handler != SIG_DFL && sig > 0 && sig < NSIG) { if (act->sa_flags & SA_SIGINFO) newact.sa_handler = (__sighandler_t) pthread_sighandler_rt; else newact.sa_handler = (__sighandler_t) pthread_sighandler; } newactp = &newact; } ^^ ok, so act gets passed directly basically.. /* The wrapper around user-provided signal handlers */ static void pthread_sighandler(int signo, SIGCONTEXT ctx) { pthread_descr self = thread_self(); char * in_sighandler; /* If we're in a sigwait operation, just record the signal received and return without calling the user's handler */ if (THREAD_GETMEM(self, p_sigwaiting)) { THREAD_SETMEM(self, p_sigwaiting, 0); THREAD_SETMEM(self, p_signal, signo); return; } /* Record that we're in a signal handler and call the user's handler function */ in_sighandler = THREAD_GETMEM(self, p_in_sighandler); if (in_sighandler == NULL) THREAD_SETMEM(self, p_in_sighandler, CURRENT_STACK_FRAME); sighandler[signo].old(signo, SIGCONTEXT_EXTRA_ARGS ctx); if (in_sighandler == NULL) THREAD_SETMEM(self, p_in_sighandler, NULL); } But... /* Record that we're in a signal handler and call the user's handler function */ in_sighandler = THREAD_GETMEM(self, p_in_sighandler); if (in_sighandler == NULL) [ lets pause for a while because we are under heavy load.. then deliver another signal that isnt being blocked and switch ] THREAD_SETMEM(self, p_in_sighandler, CURRENT_STACK_FRAME); sighandler[signo].old(signo, SIGCONTEXT_EXTRA_ARGS ctx); if (in_sighandler == NULL) THREAD_SETMEM(self, p_in_sighandler, NULL); erm.. *shrug*.. glibc 2.2 aint much better.. my suggestion for making sure your code doesnt hit the above problem, just mask off all signals for signal handling, if possible when registering with sigaction. yes. glibc people know about this for a while, and its not a major problem IMO. -- Silvio
Powered by blists - more mailing lists