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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
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