aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/mm/fault.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/mm/fault.c')
-rw-r--r--arch/i386/mm/fault.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c
index 47a3b72ec7b6..7f0fcf219a26 100644
--- a/arch/i386/mm/fault.c
+++ b/arch/i386/mm/fault.c
@@ -509,24 +509,31 @@ no_context:
509 509
510 bust_spinlocks(1); 510 bust_spinlocks(1);
511 511
512#ifdef CONFIG_X86_PAE 512 if (oops_may_print()) {
513 if (error_code & 16) { 513 #ifdef CONFIG_X86_PAE
514 pte_t *pte = lookup_address(address); 514 if (error_code & 16) {
515 515 pte_t *pte = lookup_address(address);
516 if (pte && pte_present(*pte) && !pte_exec_kernel(*pte)) 516
517 printk(KERN_CRIT "kernel tried to execute NX-protected page - exploit attempt? (uid: %d)\n", current->uid); 517 if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
518 printk(KERN_CRIT "kernel tried to execute "
519 "NX-protected page - exploit attempt? "
520 "(uid: %d)\n", current->uid);
521 }
522 #endif
523 if (address < PAGE_SIZE)
524 printk(KERN_ALERT "BUG: unable to handle kernel NULL "
525 "pointer dereference");
526 else
527 printk(KERN_ALERT "BUG: unable to handle kernel paging"
528 " request");
529 printk(" at virtual address %08lx\n",address);
530 printk(KERN_ALERT " printing eip:\n");
531 printk("%08lx\n", regs->eip);
518 } 532 }
519#endif
520 if (address < PAGE_SIZE)
521 printk(KERN_ALERT "BUG: unable to handle kernel NULL pointer dereference");
522 else
523 printk(KERN_ALERT "BUG: unable to handle kernel paging request");
524 printk(" at virtual address %08lx\n",address);
525 printk(KERN_ALERT " printing eip:\n");
526 printk("%08lx\n", regs->eip);
527 page = read_cr3(); 533 page = read_cr3();
528 page = ((unsigned long *) __va(page))[address >> 22]; 534 page = ((unsigned long *) __va(page))[address >> 22];
529 printk(KERN_ALERT "*pde = %08lx\n", page); 535 if (oops_may_print())
536 printk(KERN_ALERT "*pde = %08lx\n", page);
530 /* 537 /*
531 * We must not directly access the pte in the highpte 538 * We must not directly access the pte in the highpte
532 * case, the page table might be allocated in highmem. 539 * case, the page table might be allocated in highmem.
@@ -534,7 +541,7 @@ no_context:
534 * it's allocated already. 541 * it's allocated already.
535 */ 542 */
536#ifndef CONFIG_HIGHPTE 543#ifndef CONFIG_HIGHPTE
537 if (page & 1) { 544 if ((page & 1) && oops_may_print()) {
538 page &= PAGE_MASK; 545 page &= PAGE_MASK;
539 address &= 0x003ff000; 546 address &= 0x003ff000;
540 page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT]; 547 page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];