diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/signal_32.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/signal_64.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/traps_32.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/traps_64.c | 14 | ||||
-rw-r--r-- | arch/x86/mm/fault_32.c | 4 | ||||
-rw-r--r-- | arch/x86/mm/fault_64.c | 4 |
6 files changed, 31 insertions, 12 deletions
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c index 74df55895c8c..89a690edf999 100644 --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c | |||
@@ -198,12 +198,15 @@ asmlinkage int sys_sigreturn(unsigned long __unused) | |||
198 | return ax; | 198 | return ax; |
199 | 199 | ||
200 | badframe: | 200 | badframe: |
201 | if (show_unhandled_signals && printk_ratelimit()) | 201 | if (show_unhandled_signals && printk_ratelimit()) { |
202 | printk("%s%s[%d] bad frame in sigreturn frame:%p ip:%lx" | 202 | printk("%s%s[%d] bad frame in sigreturn frame:%p ip:%lx" |
203 | " sp:%lx oeax:%lx\n", | 203 | " sp:%lx oeax:%lx", |
204 | task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG, | 204 | task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG, |
205 | current->comm, task_pid_nr(current), frame, regs->ip, | 205 | current->comm, task_pid_nr(current), frame, regs->ip, |
206 | regs->sp, regs->orig_ax); | 206 | regs->sp, regs->orig_ax); |
207 | print_vma_addr(" in ", regs->ip); | ||
208 | printk("\n"); | ||
209 | } | ||
207 | 210 | ||
208 | force_sig(SIGSEGV, current); | 211 | force_sig(SIGSEGV, current); |
209 | return 0; | 212 | return 0; |
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c index 4eb751c60390..7347bb14e306 100644 --- a/arch/x86/kernel/signal_64.c +++ b/arch/x86/kernel/signal_64.c | |||
@@ -484,9 +484,12 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | |||
484 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | 484 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) |
485 | { | 485 | { |
486 | struct task_struct *me = current; | 486 | struct task_struct *me = current; |
487 | if (show_unhandled_signals && printk_ratelimit()) | 487 | if (show_unhandled_signals && printk_ratelimit()) { |
488 | printk("%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx\n", | 488 | printk("%s[%d] bad frame in %s frame:%p ip:%lx sp:%lx orax:%lx", |
489 | me->comm,me->pid,where,frame,regs->ip,regs->sp,regs->orig_ax); | 489 | me->comm,me->pid,where,frame,regs->ip,regs->sp,regs->orig_ax); |
490 | print_vma_addr(" in ", regs->ip); | ||
491 | printk("\n"); | ||
492 | } | ||
490 | 493 | ||
491 | force_sig(SIGSEGV, me); | 494 | force_sig(SIGSEGV, me); |
492 | } | 495 | } |
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c index 6f3bb287c702..270cfd483160 100644 --- a/arch/x86/kernel/traps_32.c +++ b/arch/x86/kernel/traps_32.c | |||
@@ -609,11 +609,14 @@ void __kprobes do_general_protection(struct pt_regs * regs, | |||
609 | current->thread.error_code = error_code; | 609 | current->thread.error_code = error_code; |
610 | current->thread.trap_no = 13; | 610 | current->thread.trap_no = 13; |
611 | if (show_unhandled_signals && unhandled_signal(current, SIGSEGV) && | 611 | if (show_unhandled_signals && unhandled_signal(current, SIGSEGV) && |
612 | printk_ratelimit()) | 612 | printk_ratelimit()) { |
613 | printk(KERN_INFO | 613 | printk(KERN_INFO |
614 | "%s[%d] general protection ip:%lx sp:%lx error:%lx\n", | 614 | "%s[%d] general protection ip:%lx sp:%lx error:%lx", |
615 | current->comm, task_pid_nr(current), | 615 | current->comm, task_pid_nr(current), |
616 | regs->ip, regs->sp, error_code); | 616 | regs->ip, regs->sp, error_code); |
617 | print_vma_addr(" in ", regs->ip); | ||
618 | printk("\n"); | ||
619 | } | ||
617 | 620 | ||
618 | force_sig(SIGSEGV, current); | 621 | force_sig(SIGSEGV, current); |
619 | return; | 622 | return; |
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c index 814801f4eb9e..911ed28afff8 100644 --- a/arch/x86/kernel/traps_64.c +++ b/arch/x86/kernel/traps_64.c | |||
@@ -642,11 +642,14 @@ static void __kprobes do_trap(int trapnr, int signr, char *str, | |||
642 | tsk->thread.trap_no = trapnr; | 642 | tsk->thread.trap_no = trapnr; |
643 | 643 | ||
644 | if (show_unhandled_signals && unhandled_signal(tsk, signr) && | 644 | if (show_unhandled_signals && unhandled_signal(tsk, signr) && |
645 | printk_ratelimit()) | 645 | printk_ratelimit()) { |
646 | printk(KERN_INFO | 646 | printk(KERN_INFO |
647 | "%s[%d] trap %s ip:%lx sp:%lx error:%lx\n", | 647 | "%s[%d] trap %s ip:%lx sp:%lx error:%lx", |
648 | tsk->comm, tsk->pid, str, | 648 | tsk->comm, tsk->pid, str, |
649 | regs->ip, regs->sp, error_code); | 649 | regs->ip, regs->sp, error_code); |
650 | print_vma_addr(" in ", regs->ip); | ||
651 | printk("\n"); | ||
652 | } | ||
650 | 653 | ||
651 | if (info) | 654 | if (info) |
652 | force_sig_info(signr, info, tsk); | 655 | force_sig_info(signr, info, tsk); |
@@ -741,11 +744,14 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs, | |||
741 | tsk->thread.trap_no = 13; | 744 | tsk->thread.trap_no = 13; |
742 | 745 | ||
743 | if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) && | 746 | if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) && |
744 | printk_ratelimit()) | 747 | printk_ratelimit()) { |
745 | printk(KERN_INFO | 748 | printk(KERN_INFO |
746 | "%s[%d] general protection ip:%lx sp:%lx error:%lx\n", | 749 | "%s[%d] general protection ip:%lx sp:%lx error:%lx", |
747 | tsk->comm, tsk->pid, | 750 | tsk->comm, tsk->pid, |
748 | regs->ip, regs->sp, error_code); | 751 | regs->ip, regs->sp, error_code); |
752 | print_vma_addr(" in ", regs->ip); | ||
753 | printk("\n"); | ||
754 | } | ||
749 | 755 | ||
750 | force_sig(SIGSEGV, tsk); | 756 | force_sig(SIGSEGV, tsk); |
751 | return; | 757 | return; |
diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c index 13d295506a17..276863dc4bdd 100644 --- a/arch/x86/mm/fault_32.c +++ b/arch/x86/mm/fault_32.c | |||
@@ -514,11 +514,13 @@ bad_area_nosemaphore: | |||
514 | #ifdef CONFIG_X86_32 | 514 | #ifdef CONFIG_X86_32 |
515 | "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", | 515 | "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", |
516 | #else | 516 | #else |
517 | "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n", | 517 | "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx", |
518 | #endif | 518 | #endif |
519 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, | 519 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, |
520 | tsk->comm, task_pid_nr(tsk), address, regs->ip, | 520 | tsk->comm, task_pid_nr(tsk), address, regs->ip, |
521 | regs->sp, error_code); | 521 | regs->sp, error_code); |
522 | print_vma_addr(" in ", regs->ip); | ||
523 | printk("\n"); | ||
522 | } | 524 | } |
523 | tsk->thread.cr2 = address; | 525 | tsk->thread.cr2 = address; |
524 | /* Kernel addresses are always protection faults */ | 526 | /* Kernel addresses are always protection faults */ |
diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c index b606bdefbb72..9ef0306efe9e 100644 --- a/arch/x86/mm/fault_64.c +++ b/arch/x86/mm/fault_64.c | |||
@@ -552,11 +552,13 @@ bad_area_nosemaphore: | |||
552 | #ifdef CONFIG_X86_32 | 552 | #ifdef CONFIG_X86_32 |
553 | "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", | 553 | "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", |
554 | #else | 554 | #else |
555 | "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n", | 555 | "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx", |
556 | #endif | 556 | #endif |
557 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, | 557 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, |
558 | tsk->comm, task_pid_nr(tsk), address, regs->ip, | 558 | tsk->comm, task_pid_nr(tsk), address, regs->ip, |
559 | regs->sp, error_code); | 559 | regs->sp, error_code); |
560 | print_vma_addr(" in ", regs->ip); | ||
561 | printk("\n"); | ||
560 | } | 562 | } |
561 | 563 | ||
562 | tsk->thread.cr2 = address; | 564 | tsk->thread.cr2 = address; |