diff options
Diffstat (limited to 'arch/x86/kernel/signal.c')
| -rw-r--r-- | arch/x86/kernel/signal.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index dee553c503d3..4fa5243c2069 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #include <asm/syscall.h> | 35 | #include <asm/syscall.h> |
| 36 | #include <asm/syscalls.h> | 36 | #include <asm/syscalls.h> |
| 37 | 37 | ||
| 38 | #include "sigframe.h" | 38 | #include <asm/sigframe.h> |
| 39 | 39 | ||
| 40 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 40 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) |
| 41 | 41 | ||
| @@ -594,17 +594,7 @@ asmlinkage unsigned long sys_sigreturn(unsigned long __unused) | |||
| 594 | return ax; | 594 | return ax; |
| 595 | 595 | ||
| 596 | badframe: | 596 | badframe: |
| 597 | if (show_unhandled_signals && printk_ratelimit()) { | 597 | signal_fault(regs, frame, "sigreturn"); |
| 598 | printk("%s%s[%d] bad frame in sigreturn frame:" | ||
| 599 | "%p ip:%lx sp:%lx oeax:%lx", | ||
| 600 | task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG, | ||
| 601 | current->comm, task_pid_nr(current), frame, regs->ip, | ||
| 602 | regs->sp, regs->orig_ax); | ||
| 603 | print_vma_addr(" in ", regs->ip); | ||
| 604 | printk(KERN_CONT "\n"); | ||
| 605 | } | ||
| 606 | |||
| 607 | force_sig(SIGSEGV, current); | ||
| 608 | 598 | ||
| 609 | return 0; | 599 | return 0; |
| 610 | } | 600 | } |
| @@ -681,6 +671,11 @@ static int signr_convert(int sig) | |||
| 681 | #define is_ia32 0 | 671 | #define is_ia32 0 |
| 682 | #endif /* CONFIG_IA32_EMULATION */ | 672 | #endif /* CONFIG_IA32_EMULATION */ |
| 683 | 673 | ||
| 674 | int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | ||
| 675 | sigset_t *set, struct pt_regs *regs); | ||
| 676 | int ia32_setup_frame(int sig, struct k_sigaction *ka, | ||
| 677 | sigset_t *set, struct pt_regs *regs); | ||
| 678 | |||
| 684 | #endif /* CONFIG_X86_32 */ | 679 | #endif /* CONFIG_X86_32 */ |
| 685 | 680 | ||
| 686 | static int | 681 | static int |
| @@ -906,8 +901,9 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | |||
| 906 | struct task_struct *me = current; | 901 | struct task_struct *me = current; |
| 907 | 902 | ||
| 908 | if (show_unhandled_signals && printk_ratelimit()) { | 903 | if (show_unhandled_signals && printk_ratelimit()) { |
| 909 | printk(KERN_INFO | 904 | printk("%s" |
| 910 | "%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx", | 905 | "%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx", |
| 906 | task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG, | ||
| 911 | me->comm, me->pid, where, frame, | 907 | me->comm, me->pid, where, frame, |
| 912 | regs->ip, regs->sp, regs->orig_ax); | 908 | regs->ip, regs->sp, regs->orig_ax); |
| 913 | print_vma_addr(" in ", regs->ip); | 909 | print_vma_addr(" in ", regs->ip); |
