25 lines
887 B
Text
25 lines
887 B
Text
Avoid sigaltstack with an RWX mmap.
|
|
|
|
Index: engine/signals.c
|
|
--- engine/signals.c.orig
|
|
+++ engine/signals.c
|
|
@@ -403,13 +403,18 @@ void install_signal_handlers(void)
|
|
#ifdef SIGSTKSZ
|
|
stack_t sigstack;
|
|
int sas_retval=-1;
|
|
+ extern char *progname;
|
|
|
|
sigstack.ss_size=SIGSTKSZ;
|
|
/* Actually the stack should only be ss_size large, and according to
|
|
SUSv2 ss_sp should point to the start of the stack, but
|
|
unfortunately Irix 6.5 (at least) expects ss_sp to point to the
|
|
end, so we work around this issue by accomodating everyone. */
|
|
- if ((sigstack.ss_sp = gforth_alloc(sigstack.ss_size*2)) != NULL) {
|
|
+ if ((sigstack.ss_sp = calloc(sigstack.ss_size, 2)) == NULL) {
|
|
+ perror(progname);
|
|
+ exit(1);
|
|
+ }
|
|
+ if (sigstack.ss_sp != NULL) {
|
|
sigstack.ss_sp += sigstack.ss_size;
|
|
sigstack.ss_flags=0;
|
|
sas_retval=sigaltstack(&sigstack,(stack_t *)0);
|