diff options
Diffstat (limited to 'winsup/cygwin/signal.cc')
-rw-r--r-- | winsup/cygwin/signal.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc index 94faaf308..467c919c3 100644 --- a/winsup/cygwin/signal.cc +++ b/winsup/cygwin/signal.cc @@ -667,7 +667,17 @@ sigaltstack (const stack_t *ss, stack_t *oss) } } if (oss) - memcpy (oss, &me.altstack, sizeof *oss); + { + char stack_marker; + memcpy (oss, &me.altstack, sizeof *oss); + if (!me.altstack.ss_flags && me.altstack.ss_sp) + { + if (&stack_marker >= (char *) me.altstack.ss_sp + && &stack_marker < (char *) me.altstack.ss_sp + + me.altstack.ss_size) + oss->ss_flags = SS_ONSTACK; + } + } } __except (EFAULT) { |