On 01/05/2012 11:55 AM, Markos Chandras wrote:
Invalid signals have no handlers so when trying to restore the old
handler to a bad signal a SIGSEGV occurs. This is because the library
tries to store the old handler to an invalid memory area where it things
the bad signal lives.

Signed-off-by: Markos Chandras<markos.chand...@imgtec.com>
---
  libpthread/linuxthreads/signals.c |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/libpthread/linuxthreads/signals.c 
b/libpthread/linuxthreads/signals.c
index c081255..61b411a 100644
--- a/libpthread/linuxthreads/signals.c
+++ b/libpthread/linuxthreads/signals.c
@@ -113,7 +113,7 @@ int __pthread_sigaction(int sig, const struct sigaction * 
act,
      newactp = NULL;
    if (__libc_sigaction(sig, newactp, oact) == -1)
      {
-      if (act)
+      if (act&&  (sig>  0&&  sig<  NSIG))
        __sighandler[sig].old = (arch_sighandler_t) old;
        return -1;
      }

For some peculiar reason, the first e-mail I sent with the summary did not make it to the mailing list. This patch is in conjunction with bug https://bugs.busybox.net/show_bug.cgi?id=4640 and since I am not sure whether linuxthreads are maintained anymore or not, I would like to send this patch here for review.

--
markos

_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to