aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/signal.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-12-29 03:45:15 -0500
committerIngo Molnar <mingo@elte.hu>2008-12-29 03:45:15 -0500
commite1df957670aef74ffd9a4ad93e6d2c90bf6b4845 (patch)
treebca1fcfef55b3e3e82c9a822b4ac6428fce2b419 /arch/x86/kernel/signal.c
parent2b583d8bc8d7105b58d7481a4a0ceb718dac49c6 (diff)
parent3c92ec8ae91ecf59d88c798301833d7cf83f2179 (diff)
Merge branch 'linus' into perfcounters/core
Conflicts: fs/exec.c include/linux/init_task.h Simple context conflicts.
Diffstat (limited to 'arch/x86/kernel/signal.c')
-rw-r--r--arch/x86/kernel/signal.c22
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
596badframe: 596badframe:
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
674int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
675 sigset_t *set, struct pt_regs *regs);
676int 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
686static int 681static 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);