x86: Introduce show_fault_oops helper to fault_32|64.c
PATCH 2/3 x86: Introduce show_fault_oops helper to fault_32|64.c
This will help when unifying the oops dumping code on 32/64 bit. No functional changes.
Signed-off-by Harvey Harrison <[email protected]>
--- arch/x86/mm/fault_32.c | 54 ++++++++++++++++++++++++++--------------------- arch/x86/mm/fault_64.c | 21 ++++++++++++------ 2 files changed, 44 insertions(+), 31 deletions(-)
arch/x86/mm/fault_32.c +30 -24
@@ -323,6 +323,35 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address)return 0 ; } +static void show_fault_oops (struct pt_regs *regs,unsigned long error_code, +unsigned long address) +{ +if (!oops_may_print ()) +return ; + +#ifdef CONFIG_X86_PAE +if (error_code &PF_INSTR ) { +int level; +pte_t *pte =lookup_address (address, &level); + +if (pte &&pte_present (*pte) && !pte_exec (*pte)) +printk (KERN_CRIT "kernel tried to execute " +"NX-protected page - exploit attempt? " +"(uid: %d)\n" , current->uid); + } +#endif +if (address <PAGE_SIZE ) +printk (KERN_ALERT "BUG: unable to handle kernel NULL " +"pointer dereference" ); +else +printk (KERN_ALERT "BUG: unable to handle kernel paging" +" request" ); +printk (" at virtual address %08lx\n" , address); +printk (KERN_ALERT "printing ip: %08lx " , regs->ip); + +dump_pagetable (address); +} +/* * Handle a fault on the vmalloc or module mapping area *
@@ -633,30 +662,7 @@ no_context:bust_spinlocks (1 ); -if (oops_may_print ()) { - -#ifdef CONFIG_X86_PAE -if (error_code &PF_INSTR ) { -int level; -pte_t *pte =lookup_address (address, &level); - -if (pte &&pte_present (*pte) && !pte_exec (*pte)) -printk (KERN_CRIT "kernel tried to execute " -"NX-protected page - exploit attempt? " -"(uid: %d)\n" , current->uid); - } -#endif -if (address <PAGE_SIZE ) -printk (KERN_ALERT "BUG: unable to handle kernel NULL " -"pointer dereference" ); -else -printk (KERN_ALERT "BUG: unable to handle kernel paging" -" request" ); -printk (" at virtual address %08lx\n" , address); -printk (KERN_ALERT "printing ip: %08lx " , regs->ip); - -dump_pagetable (address); - } +show_fault_oops (regs, error_code, address); tsk->thread.cr2 = address; tsk->thread.trap_no =14 ;
arch/x86/mm/fault_64.c +14 -7
@@ -293,6 +293,18 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address)return 0 ; } +static void show_fault_oops (struct pt_regs *regs,unsigned long error_code, +unsigned long address) +{ +if (address <PAGE_SIZE ) +printk (KERN_ALERT "Unable to handle kernel NULL pointer dereference" ); +else +printk (KERN_ALERT "Unable to handle kernel paging request" ); +printk (" at %016lx RIP: \n" KERN_ALERT , address); +printk_address (regs->ip,1 ); +dump_pagetable (address); +} + static noinline void pgtable_bad(unsigned long address, struct pt_regs *regs,unsigned long error_code) {
@@ -636,13 +648,8 @@ no_context: flags =oops_begin (); -if (address <PAGE_SIZE ) -printk (KERN_ALERT "Unable to handle kernel NULL pointer dereference" ); -else -printk (KERN_ALERT "Unable to handle kernel paging request" ); -printk (" at %016lx RIP: \n" KERN_ALERT , address); -printk_address (regs->ip,1 ); -dump_pagetable (address); +show_fault_oops (regs, error_code, address); + tsk->thread.cr2 = address; tsk->thread.trap_no =14 ; tsk->thread.error_code = error_code;
Signature · 1 line
1.5.4.rc3.1118.gf6754c
Ingo Molnar
AppliedQuoted 2 lines · Harvey Harrison
This will help when unifying the oops dumping code on 32/64 bit. No functional changes.
thanks, applied.
Ingo