diff options
author | Prasanna S Panchamukhi <prasanna@in.ibm.com> | 2005-09-06 18:19:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-07 19:57:59 -0400 |
commit | 3d97ae5b958855ac007b6f56a0f94ab8ade09e9e (patch) | |
tree | 6258b62fdbf4fcc7086e86d920e23609022d0881 /arch/i386/kernel/entry.S | |
parent | d0aaff9796c3310326d10da44fc0faed352a1d29 (diff) |
[PATCH] kprobes: prevent possible race conditions i386 changes
This patch contains the i386 architecture specific changes to prevent the
possible race conditions.
Signed-off-by: Prasanna S Panchamukhi <prasanna@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386/kernel/entry.S')
-rw-r--r-- | arch/i386/kernel/entry.S | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index abb909793efc..3aad03839660 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S | |||
@@ -507,7 +507,7 @@ label: \ | |||
507 | pushl $__KERNEL_CS; \ | 507 | pushl $__KERNEL_CS; \ |
508 | pushl $sysenter_past_esp | 508 | pushl $sysenter_past_esp |
509 | 509 | ||
510 | ENTRY(debug) | 510 | KPROBE_ENTRY(debug) |
511 | cmpl $sysenter_entry,(%esp) | 511 | cmpl $sysenter_entry,(%esp) |
512 | jne debug_stack_correct | 512 | jne debug_stack_correct |
513 | FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn) | 513 | FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn) |
@@ -518,7 +518,7 @@ debug_stack_correct: | |||
518 | movl %esp,%eax # pt_regs pointer | 518 | movl %esp,%eax # pt_regs pointer |
519 | call do_debug | 519 | call do_debug |
520 | jmp ret_from_exception | 520 | jmp ret_from_exception |
521 | 521 | .previous .text | |
522 | /* | 522 | /* |
523 | * NMI is doubly nasty. It can happen _while_ we're handling | 523 | * NMI is doubly nasty. It can happen _while_ we're handling |
524 | * a debug fault, and the debug fault hasn't yet been able to | 524 | * a debug fault, and the debug fault hasn't yet been able to |
@@ -591,13 +591,14 @@ nmi_16bit_stack: | |||
591 | .long 1b,iret_exc | 591 | .long 1b,iret_exc |
592 | .previous | 592 | .previous |
593 | 593 | ||
594 | ENTRY(int3) | 594 | KPROBE_ENTRY(int3) |
595 | pushl $-1 # mark this as an int | 595 | pushl $-1 # mark this as an int |
596 | SAVE_ALL | 596 | SAVE_ALL |
597 | xorl %edx,%edx # zero error code | 597 | xorl %edx,%edx # zero error code |
598 | movl %esp,%eax # pt_regs pointer | 598 | movl %esp,%eax # pt_regs pointer |
599 | call do_int3 | 599 | call do_int3 |
600 | jmp ret_from_exception | 600 | jmp ret_from_exception |
601 | .previous .text | ||
601 | 602 | ||
602 | ENTRY(overflow) | 603 | ENTRY(overflow) |
603 | pushl $0 | 604 | pushl $0 |
@@ -631,17 +632,19 @@ ENTRY(stack_segment) | |||
631 | pushl $do_stack_segment | 632 | pushl $do_stack_segment |
632 | jmp error_code | 633 | jmp error_code |
633 | 634 | ||
634 | ENTRY(general_protection) | 635 | KPROBE_ENTRY(general_protection) |
635 | pushl $do_general_protection | 636 | pushl $do_general_protection |
636 | jmp error_code | 637 | jmp error_code |
638 | .previous .text | ||
637 | 639 | ||
638 | ENTRY(alignment_check) | 640 | ENTRY(alignment_check) |
639 | pushl $do_alignment_check | 641 | pushl $do_alignment_check |
640 | jmp error_code | 642 | jmp error_code |
641 | 643 | ||
642 | ENTRY(page_fault) | 644 | KPROBE_ENTRY(page_fault) |
643 | pushl $do_page_fault | 645 | pushl $do_page_fault |
644 | jmp error_code | 646 | jmp error_code |
647 | .previous .text | ||
645 | 648 | ||
646 | #ifdef CONFIG_X86_MCE | 649 | #ifdef CONFIG_X86_MCE |
647 | ENTRY(machine_check) | 650 | ENTRY(machine_check) |