diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c index 121c7bda6297..3a94941578fa 100644 --- a/arch/x86/mm/fault_64.c +++ b/arch/x86/mm/fault_64.c @@ -298,7 +298,6 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, struct mm_struct *mm; struct vm_area_struct * vma; unsigned long address; - const struct exception_table_entry *fixup; int write, fault; unsigned long flags; siginfo_t info; @@ -508,9 +507,7 @@ bad_area_nosemaphore: no_context: /* Are we prepared to handle this kernel fault? */ - fixup = search_exception_tables(regs->ip); - if (fixup) { - regs->ip = fixup->fixup; + if (fixup_exception(regs)) { return; } diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h index f4ce8768ad44..31d794702719 100644 --- a/include/asm-x86/uaccess_64.h +++ b/include/asm-x86/uaccess_64.h @@ -65,6 +65,8 @@ struct exception_table_entry unsigned long insn, fixup; }; +extern int fixup_exception(struct pt_regs *regs); + #define ARCH_HAS_SEARCH_EXTABLE /*