diff options
Diffstat (limited to 'arch/x86/kernel/signal.c')
-rw-r--r-- | arch/x86/kernel/signal.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index b1cc6da64208..2725a294d734 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
@@ -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 | } |
@@ -901,8 +891,9 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | |||
901 | struct task_struct *me = current; | 891 | struct task_struct *me = current; |
902 | 892 | ||
903 | if (show_unhandled_signals && printk_ratelimit()) { | 893 | if (show_unhandled_signals && printk_ratelimit()) { |
904 | printk(KERN_INFO | 894 | printk("%s" |
905 | "%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx", | 895 | "%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx", |
896 | task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG, | ||
906 | me->comm, me->pid, where, frame, | 897 | me->comm, me->pid, where, frame, |
907 | regs->ip, regs->sp, regs->orig_ax); | 898 | regs->ip, regs->sp, regs->orig_ax); |
908 | print_vma_addr(" in ", regs->ip); | 899 | print_vma_addr(" in ", regs->ip); |