X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fum%2Fkernel%2Fskas%2Ftrap_user.c;h=8e9b46d4702ecec7bf46b92a5092fcd7c4cca2be;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=96593709a6e169c9b9a40ee5b480004d6d235062;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/um/kernel/skas/trap_user.c b/arch/um/kernel/skas/trap_user.c index 96593709a..8e9b46d47 100644 --- a/arch/um/kernel/skas/trap_user.c +++ b/arch/um/kernel/skas/trap_user.c @@ -5,7 +5,6 @@ #include #include -#include #include "sysdep/ptrace.h" #include "signal_user.h" #include "user_util.h" @@ -21,6 +20,14 @@ void sig_handler_common_skas(int sig, void *sc_ptr) int save_errno = errno; int save_user; + /* This is done because to allow SIGSEGV to be delivered inside a SEGV + * handler. This can happen in copy_user, and if SEGV is disabled, + * the process will die. + * XXX Figure out why this is better than SA_NODEFER + */ + if(sig == SIGSEGV) + change_sig(SIGSEGV, 1); + r = &TASK_REGS(get_current())->skas; save_user = r->is_user; r->is_user = 0;