]> err.no Git - linux-2.6/commitdiff
x86: introduce show_fault_oops helper to fault_32|64.c
authorHarvey Harrison <harvey.harrison@gmail.com>
Wed, 30 Jan 2008 12:34:10 +0000 (13:34 +0100)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Jan 2008 12:34:10 +0000 (13:34 +0100)
This will help when unifying the oops dumping code on 32/64
bit.  No functional changes.

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/mm/fault_32.c
arch/x86/mm/fault_64.c

index 0bd241729aa364e8ac88479641523f28b49779af..fda3997588207bc8915522094c8c2f9b7349b005 100644 (file)
@@ -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;
index ccbb8e30d9f5b6da281dcfc2f14e04901c0dff1e..1897704dad46906aefe3eff459fa732135d7c502 100644 (file)
@@ -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;