diff options
author | Richard Weinberger <[email protected]> | 2013-09-23 17:38:02 +0200 |
---|---|---|
committer | Richard Weinberger <[email protected]> | 2013-11-17 11:27:30 +0100 |
commit | f72c22e45e8f8fe78c7f793d983bee5bed63497e (patch) | |
tree | 0e3051e2d357548d086a2ac00c4bfe201fe4e31d /arch/um/os-Linux/signal.c | |
parent | 9d1ee8ce92e16c6aa0a3fd91ee8ed9e403b3a2eb (diff) |
um: Make stack trace reliable against kernel mode faults
As UML uses an alternative signal stack we cannot use
the current stack pointer for stack dumping if UML itself
dies by SIGSEGV. To bypass this issue we save regs taken
from mcontext in our segv handler into thread_struct and
use these regs to obtain the stack pointer in show_stack().
Signed-off-by: Richard Weinberger <[email protected]>
Diffstat (limited to 'arch/um/os-Linux/signal.c')
-rw-r--r-- | arch/um/os-Linux/signal.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index 905924b773d3..7b605e4dfffa 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c @@ -304,3 +304,11 @@ int set_signals(int enable) return ret; } + +int os_is_signal_stack(void) +{ + stack_t ss; + sigaltstack(NULL, &ss); + + return ss.ss_flags & SS_ONSTACK; +} |