diff options
-rw-r--r-- | sys/ia64/ia64/trap.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c index 8626641..d22b8ff0 100644 --- a/sys/ia64/ia64/trap.c +++ b/sys/ia64/ia64/trap.c @@ -699,7 +699,9 @@ trap(int vector, struct trapframe *framep) /* * Additionally check the privilege level. We don't want to * panic when we're in the gateway page, running at user - * level. This happens for the signal trampolines. + * level. This happens for the signal trampolines. Note that + * when that happens, user is defined as 0 above. We need to + * set user to 1 to force calling userret() and do_ast(). */ if (!TRAPF_USERMODE(framep)) { /* Check for copyin/copyout fault. */ @@ -711,7 +713,8 @@ trap(int vector, struct trapframe *framep) goto out; } goto dopanic; - } + } else + user = 1; ucode = va; i = (rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV; break; |