aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--linuxthreads/signals.c13
2 files changed, 14 insertions, 4 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 39ffba76d2..2812806fe7 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+1998-09-02 11:08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * signals.c (sigaction): Check that sig is less than NSIG to avoid
+ array index overflow.
+
1998-09-06 10:56 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/pthread/semaphore.h: New file.
diff --git a/linuxthreads/signals.c b/linuxthreads/signals.c
index a6674bfc0d..5444ef73f3 100644
--- a/linuxthreads/signals.c
+++ b/linuxthreads/signals.c
@@ -102,7 +102,8 @@ int sigaction(int sig, const struct sigaction * act,
if (act)
{
newact = *act;
- if (act->sa_handler != SIG_IGN && act->sa_handler != SIG_DFL)
+ if (act->sa_handler != SIG_IGN && act->sa_handler != SIG_DFL
+ && sig < NSIG)
newact.sa_handler = pthread_sighandler;
newactp = &newact;
}
@@ -110,9 +111,13 @@ int sigaction(int sig, const struct sigaction * act,
newactp = NULL;
if (__sigaction(sig, newactp, oact) == -1)
return -1;
- if (oact != NULL) oact->sa_handler = sighandler[sig];
- if (act)
- sighandler[sig] = act->sa_handler;
+ if (sig < NSIG)
+ {
+ if (oact != NULL)
+ oact->sa_handler = sighandler[sig];
+ if (act)
+ sighandler[sig] = act->sa_handler;
+ }
return 0;
}