x86: use shorter addresses in i386 segfault printks
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / x86 / mm / fault_32.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 * Copyright (C) 1995 Linus Torvalds
3 */
4
5#include <linux/signal.h>
6#include <linux/sched.h>
7#include <linux/kernel.h>
8#include <linux/errno.h>
9#include <linux/string.h>
10#include <linux/types.h>
11#include <linux/ptrace.h>
12#include <linux/mman.h>
13#include <linux/mm.h>
14#include <linux/smp.h>
1da177e4
LT
15#include <linux/interrupt.h>
16#include <linux/init.h>
17#include <linux/tty.h>
18#include <linux/vt_kern.h> /* For unblank_screen() */
19#include <linux/highmem.h>
28609f6e 20#include <linux/bootmem.h> /* for max_low_pfn */
1eeb66a1 21#include <linux/vmalloc.h>
1da177e4 22#include <linux/module.h>
3d97ae5b 23#include <linux/kprobes.h>
11a4180c 24#include <linux/uaccess.h>
1eeb66a1 25#include <linux/kdebug.h>
1da177e4
LT
26
27#include <asm/system.h>
1da177e4 28#include <asm/desc.h>
78be3706 29#include <asm/segment.h>
1da177e4 30
33cb5243
HH
31/*
32 * Page fault error code bits
33 * bit 0 == 0 means no page found, 1 means protection fault
34 * bit 1 == 0 means read, 1 means write
35 * bit 2 == 0 means kernel, 1 means user-mode
36 * bit 3 == 1 means use of reserved bit detected
37 * bit 4 == 1 means fault was an instruction fetch
38 */
6f4d368e 39#define PF_PROT (1<<0)
33cb5243 40#define PF_WRITE (1<<1)
6f4d368e
HH
41#define PF_USER (1<<2)
42#define PF_RSVD (1<<3)
33cb5243
HH
43#define PF_INSTR (1<<4)
44
74a0b576 45static inline int notify_page_fault(struct pt_regs *regs)
b71b5b65 46{
33cb5243 47#ifdef CONFIG_KPROBES
74a0b576
CH
48 int ret = 0;
49
50 /* kprobe_running() needs smp_processor_id() */
51 if (!user_mode_vm(regs)) {
52 preempt_disable();
53 if (kprobe_running() && kprobe_fault_handler(regs, 14))
54 ret = 1;
55 preempt_enable();
56 }
b71b5b65 57
74a0b576 58 return ret;
74a0b576 59#else
74a0b576 60 return 0;
74a0b576 61#endif
33cb5243 62}
b71b5b65 63
33cb5243 64/*
1dc85be0 65 * X86_32
1da177e4
LT
66 * Sometimes AMD Athlon/Opteron CPUs report invalid exceptions on prefetch.
67 * Check that here and ignore it.
1dc85be0
HH
68 *
69 * X86_64
70 * Sometimes the CPU reports invalid exceptions on prefetch.
71 * Check that here and ignore it.
72 *
73 * Opcode checker based on code by Richard Brunner
1da177e4 74 */
1dc85be0
HH
75static int is_prefetch(struct pt_regs *regs, unsigned long addr,
76 unsigned long error_code)
33cb5243 77{
1dc85be0 78 unsigned char *instr;
1da177e4 79 int scan_more = 1;
33cb5243 80 int prefetch = 0;
1dc85be0
HH
81 unsigned char *max_instr;
82
83#ifdef CONFIG_X86_32
1dc85be0
HH
84 if (unlikely(boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
85 boot_cpu_data.x86 >= 6)) {
86 /* Catch an obscure case of prefetch inside an NX page. */
87 if (nx_enabled && (error_code & PF_INSTR))
88 return 0;
89 } else {
90 return 0;
91 }
1dc85be0
HH
92#else
93 /* If it was a exec fault ignore */
94 if (error_code & PF_INSTR)
95 return 0;
1dc85be0 96#endif
1da177e4 97
f2857ce9 98 instr = (unsigned char *)convert_ip_to_linear(current, regs);
1dc85be0
HH
99 max_instr = instr + 15;
100
1dc85be0
HH
101 if (user_mode(regs) && instr >= (unsigned char *)TASK_SIZE)
102 return 0;
1dc85be0
HH
103
104 while (scan_more && instr < max_instr) {
1da177e4
LT
105 unsigned char opcode;
106 unsigned char instr_hi;
107 unsigned char instr_lo;
108
11a4180c 109 if (probe_kernel_address(instr, opcode))
33cb5243 110 break;
1da177e4 111
33cb5243
HH
112 instr_hi = opcode & 0xf0;
113 instr_lo = opcode & 0x0f;
1da177e4
LT
114 instr++;
115
33cb5243 116 switch (instr_hi) {
1da177e4
LT
117 case 0x20:
118 case 0x30:
33cb5243
HH
119 /*
120 * Values 0x26,0x2E,0x36,0x3E are valid x86 prefixes.
121 * In X86_64 long mode, the CPU will signal invalid
122 * opcode if some of these prefixes are present so
123 * X86_64 will never get here anyway
124 */
1da177e4
LT
125 scan_more = ((instr_lo & 7) == 0x6);
126 break;
33cb5243
HH
127#ifdef CONFIG_X86_64
128 case 0x40:
129 /*
130 * In AMD64 long mode 0x40..0x4F are valid REX prefixes
131 * Need to figure out under what instruction mode the
132 * instruction was issued. Could check the LDT for lm,
133 * but for now it's good enough to assume that long
134 * mode only uses well known segments or kernel.
135 */
136 scan_more = (!user_mode(regs)) || (regs->cs == __USER_CS);
137 break;
138#endif
1da177e4
LT
139 case 0x60:
140 /* 0x64 thru 0x67 are valid prefixes in all modes. */
141 scan_more = (instr_lo & 0xC) == 0x4;
33cb5243 142 break;
1da177e4 143 case 0xF0:
33cb5243 144 /* 0xF0, 0xF2, 0xF3 are valid prefixes in all modes. */
1da177e4 145 scan_more = !instr_lo || (instr_lo>>1) == 1;
33cb5243 146 break;
1da177e4
LT
147 case 0x00:
148 /* Prefetch instruction is 0x0F0D or 0x0F18 */
149 scan_more = 0;
f2857ce9 150
11a4180c 151 if (probe_kernel_address(instr, opcode))
1da177e4
LT
152 break;
153 prefetch = (instr_lo == 0xF) &&
154 (opcode == 0x0D || opcode == 0x18);
33cb5243 155 break;
1da177e4
LT
156 default:
157 scan_more = 0;
158 break;
33cb5243 159 }
1da177e4
LT
160 }
161 return prefetch;
162}
163
c4aba4a8 164static void force_sig_info_fault(int si_signo, int si_code,
869f96a0
IM
165 unsigned long address, struct task_struct *tsk)
166{
167 siginfo_t info;
168
169 info.si_signo = si_signo;
170 info.si_errno = 0;
171 info.si_code = si_code;
172 info.si_addr = (void __user *)address;
173 force_sig_info(si_signo, &info, tsk);
174}
175
75604d7f 176void do_invalid_op(struct pt_regs *, unsigned long);
1da177e4 177
101f12af
JB
178static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)
179{
180 unsigned index = pgd_index(address);
181 pgd_t *pgd_k;
182 pud_t *pud, *pud_k;
183 pmd_t *pmd, *pmd_k;
184
185 pgd += index;
186 pgd_k = init_mm.pgd + index;
187
188 if (!pgd_present(*pgd_k))
189 return NULL;
190
191 /*
192 * set_pgd(pgd, *pgd_k); here would be useless on PAE
193 * and redundant with the set_pmd() on non-PAE. As would
194 * set_pud.
195 */
196
197 pud = pud_offset(pgd, address);
198 pud_k = pud_offset(pgd_k, address);
199 if (!pud_present(*pud_k))
200 return NULL;
201
202 pmd = pmd_offset(pud, address);
203 pmd_k = pmd_offset(pud_k, address);
204 if (!pmd_present(*pmd_k))
205 return NULL;
8b14cb99 206 if (!pmd_present(*pmd)) {
101f12af 207 set_pmd(pmd, *pmd_k);
8b14cb99
ZA
208 arch_flush_lazy_mmu_mode();
209 } else
101f12af
JB
210 BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k));
211 return pmd_k;
212}
213
1dc85be0
HH
214#ifdef CONFIG_X86_64
215static const char errata93_warning[] =
216KERN_ERR "******* Your BIOS seems to not contain a fix for K8 errata #93\n"
217KERN_ERR "******* Working around it, but it may cause SEGVs or burn power.\n"
218KERN_ERR "******* Please consider a BIOS update.\n"
219KERN_ERR "******* Disabling USB legacy in the BIOS may also help.\n";
fdfe8aa8 220#endif
1dc85be0
HH
221
222/* Workaround for K8 erratum #93 & buggy BIOS.
223 BIOS SMM functions are required to use a specific workaround
224 to avoid corruption of the 64bit RIP register on C stepping K8.
225 A lot of BIOS that didn't get tested properly miss this.
226 The OS sees this as a page fault with the upper 32bits of RIP cleared.
227 Try to work around it here.
fdfe8aa8
HH
228 Note we only handle faults in kernel here.
229 Does nothing for X86_32
230 */
1dc85be0
HH
231static int is_errata93(struct pt_regs *regs, unsigned long address)
232{
fdfe8aa8 233#ifdef CONFIG_X86_64
1dc85be0
HH
234 static int warned;
235 if (address != regs->ip)
236 return 0;
237 if ((address >> 32) != 0)
238 return 0;
239 address |= 0xffffffffUL << 32;
240 if ((address >= (u64)_stext && address <= (u64)_etext) ||
241 (address >= MODULES_VADDR && address <= MODULES_END)) {
242 if (!warned) {
243 printk(errata93_warning);
244 warned = 1;
245 }
246 regs->ip = address;
247 return 1;
248 }
fdfe8aa8 249#endif
1dc85be0
HH
250 return 0;
251}
fdfe8aa8 252
1dc85be0 253
101f12af
JB
254/*
255 * Handle a fault on the vmalloc or module mapping area
256 *
257 * This assumes no large pages in there.
258 */
259static inline int vmalloc_fault(unsigned long address)
260{
fdfe8aa8 261#ifdef CONFIG_X86_32
101f12af
JB
262 unsigned long pgd_paddr;
263 pmd_t *pmd_k;
264 pte_t *pte_k;
265 /*
266 * Synchronize this task's top level page-table
267 * with the 'reference' page table.
268 *
269 * Do _not_ use "current" here. We might be inside
270 * an interrupt in the middle of a task switch..
271 */
272 pgd_paddr = read_cr3();
273 pmd_k = vmalloc_sync_one(__va(pgd_paddr), address);
274 if (!pmd_k)
275 return -1;
276 pte_k = pte_offset_kernel(pmd_k, address);
277 if (!pte_present(*pte_k))
278 return -1;
279 return 0;
fdfe8aa8
HH
280#else
281 pgd_t *pgd, *pgd_ref;
282 pud_t *pud, *pud_ref;
283 pmd_t *pmd, *pmd_ref;
284 pte_t *pte, *pte_ref;
285
286 /* Copy kernel mappings over when needed. This can also
287 happen within a race in page table update. In the later
288 case just flush. */
289
290 pgd = pgd_offset(current->mm ?: &init_mm, address);
291 pgd_ref = pgd_offset_k(address);
292 if (pgd_none(*pgd_ref))
293 return -1;
294 if (pgd_none(*pgd))
295 set_pgd(pgd, *pgd_ref);
296 else
297 BUG_ON(pgd_page_vaddr(*pgd) != pgd_page_vaddr(*pgd_ref));
298
299 /* Below here mismatches are bugs because these lower tables
300 are shared */
301
302 pud = pud_offset(pgd, address);
303 pud_ref = pud_offset(pgd_ref, address);
304 if (pud_none(*pud_ref))
305 return -1;
306 if (pud_none(*pud) || pud_page_vaddr(*pud) != pud_page_vaddr(*pud_ref))
307 BUG();
308 pmd = pmd_offset(pud, address);
309 pmd_ref = pmd_offset(pud_ref, address);
310 if (pmd_none(*pmd_ref))
311 return -1;
312 if (pmd_none(*pmd) || pmd_page(*pmd) != pmd_page(*pmd_ref))
313 BUG();
314 pte_ref = pte_offset_kernel(pmd_ref, address);
315 if (!pte_present(*pte_ref))
316 return -1;
317 pte = pte_offset_kernel(pmd, address);
318 /* Don't use pte_page here, because the mappings can point
319 outside mem_map, and the NUMA hash lookup cannot handle
320 that. */
321 if (!pte_present(*pte) || pte_pfn(*pte) != pte_pfn(*pte_ref))
322 BUG();
323 return 0;
324#endif
101f12af
JB
325}
326
abd4f750
MAS
327int show_unhandled_signals = 1;
328
1da177e4
LT
329/*
330 * This routine handles page faults. It determines the address,
331 * and the problem, and then passes it off to one of the appropriate
332 * routines.
1da177e4 333 */
75604d7f 334void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
1da177e4
LT
335{
336 struct task_struct *tsk;
337 struct mm_struct *mm;
33cb5243 338 struct vm_area_struct *vma;
1da177e4 339 unsigned long address;
869f96a0 340 int write, si_code;
83c54070 341 int fault;
1da177e4 342
143a5d32
PZ
343 /*
344 * We can fault from pretty much anywhere, with unknown IRQ state.
345 */
346 trace_hardirqs_fixup();
347
608566b4
HH
348 tsk = current;
349 mm = tsk->mm;
350 prefetchw(&mm->mmap_sem);
351
1da177e4 352 /* get the address */
33cb5243 353 address = read_cr2();
1da177e4 354
869f96a0 355 si_code = SEGV_MAPERR;
1da177e4 356
608566b4
HH
357 if (notify_page_fault(regs))
358 return;
359
1da177e4
LT
360 /*
361 * We fault-in kernel-space virtual memory on-demand. The
362 * 'reference' page table is init_mm.pgd.
363 *
364 * NOTE! We MUST NOT take any locks for this case. We may
365 * be in an interrupt or a critical region, and should
366 * only copy the information from the master page table,
367 * nothing more.
368 *
369 * This verifies that the fault happens in kernel space
370 * (error_code & 4) == 0, and that the fault was not a
101f12af 371 * protection error (error_code & 9) == 0.
1da177e4 372 */
101f12af 373 if (unlikely(address >= TASK_SIZE)) {
318aa296
HH
374 if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
375 vmalloc_fault(address) >= 0)
101f12af 376 return;
101f12af 377 /*
1da177e4
LT
378 * Don't take the mm semaphore here. If we fixup a prefetch
379 * fault we could otherwise deadlock.
380 */
381 goto bad_area_nosemaphore;
101f12af
JB
382 }
383
101f12af
JB
384 /* It's safe to allow irq's after cr2 has been saved and the vmalloc
385 fault has been handled. */
65ea5b03 386 if (regs->flags & (X86_EFLAGS_IF|VM_MASK))
101f12af 387 local_irq_enable();
1da177e4 388
1da177e4
LT
389 /*
390 * If we're in an interrupt, have no user context or are running in an
33cb5243 391 * atomic region then we must not take the fault.
1da177e4
LT
392 */
393 if (in_atomic() || !mm)
394 goto bad_area_nosemaphore;
395
396 /* When running in the kernel we expect faults to occur only to
397 * addresses in user space. All other faults represent errors in the
27b46d76 398 * kernel and should generate an OOPS. Unfortunately, in the case of an
80f7228b 399 * erroneous fault occurring in a code path which already holds mmap_sem
1da177e4
LT
400 * we will deadlock attempting to validate the fault against the
401 * address space. Luckily the kernel only validly references user
402 * space from well defined areas of code, which are listed in the
403 * exceptions table.
404 *
405 * As the vast majority of faults will be valid we will only perform
27b46d76 406 * the source reference check when there is a possibility of a deadlock.
1da177e4
LT
407 * Attempt to lock the address space, if we cannot we then validate the
408 * source. If this is invalid we can skip the address space check,
409 * thus avoiding the deadlock.
410 */
411 if (!down_read_trylock(&mm->mmap_sem)) {
33cb5243 412 if ((error_code & PF_USER) == 0 &&
65ea5b03 413 !search_exception_tables(regs->ip))
1da177e4
LT
414 goto bad_area_nosemaphore;
415 down_read(&mm->mmap_sem);
416 }
417
418 vma = find_vma(mm, address);
419 if (!vma)
420 goto bad_area;
421 if (vma->vm_start <= address)
422 goto good_area;
423 if (!(vma->vm_flags & VM_GROWSDOWN))
424 goto bad_area;
33cb5243 425 if (error_code & PF_USER) {
1da177e4 426 /*
65ea5b03 427 * Accessing the stack below %sp is always a bug.
21528454
CE
428 * The large cushion allows instructions like enter
429 * and pusha to work. ("enter $65535,$31" pushes
65ea5b03 430 * 32 pointers and then decrements %sp by 65535.)
1da177e4 431 */
65ea5b03 432 if (address + 65536 + 32 * sizeof(unsigned long) < regs->sp)
1da177e4
LT
433 goto bad_area;
434 }
435 if (expand_stack(vma, address))
436 goto bad_area;
437/*
438 * Ok, we have a good vm_area for this memory access, so
439 * we can handle it..
440 */
441good_area:
869f96a0 442 si_code = SEGV_ACCERR;
1da177e4 443 write = 0;
33cb5243
HH
444 switch (error_code & (PF_PROT|PF_WRITE)) {
445 default: /* 3: write, present */
446 /* fall through */
447 case PF_WRITE: /* write, not present */
448 if (!(vma->vm_flags & VM_WRITE))
449 goto bad_area;
450 write++;
451 break;
452 case PF_PROT: /* read, present */
453 goto bad_area;
454 case 0: /* read, not present */
455 if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)))
1da177e4 456 goto bad_area;
1da177e4
LT
457 }
458
459 survive:
460 /*
461 * If for any reason at all we couldn't handle the fault,
462 * make sure we exit gracefully rather than endlessly redo
463 * the fault.
464 */
83c54070
NP
465 fault = handle_mm_fault(mm, vma, address, write);
466 if (unlikely(fault & VM_FAULT_ERROR)) {
467 if (fault & VM_FAULT_OOM)
1da177e4 468 goto out_of_memory;
83c54070
NP
469 else if (fault & VM_FAULT_SIGBUS)
470 goto do_sigbus;
471 BUG();
1da177e4 472 }
83c54070
NP
473 if (fault & VM_FAULT_MAJOR)
474 tsk->maj_flt++;
475 else
476 tsk->min_flt++;
1da177e4
LT
477
478 /*
479 * Did it hit the DOS screen memory VA from vm86 mode?
480 */
65ea5b03 481 if (regs->flags & VM_MASK) {
1da177e4
LT
482 unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
483 if (bit < 32)
484 tsk->thread.screen_bitmap |= 1 << bit;
485 }
486 up_read(&mm->mmap_sem);
487 return;
488
489/*
490 * Something tried to access memory that isn't in our memory map..
491 * Fix it, but check if it's kernel or user first..
492 */
493bad_area:
494 up_read(&mm->mmap_sem);
495
496bad_area_nosemaphore:
497 /* User mode accesses just cause a SIGSEGV */
33cb5243 498 if (error_code & PF_USER) {
e5e3c84b
SR
499 /*
500 * It's possible to have interrupts off here.
501 */
502 local_irq_enable();
503
33cb5243
HH
504 /*
505 * Valid to do another page fault here because this one came
1da177e4
LT
506 * from user space.
507 */
508 if (is_prefetch(regs, address, error_code))
509 return;
510
abd4f750
MAS
511 if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) &&
512 printk_ratelimit()) {
6f4d368e
HH
513 printk(
514#ifdef CONFIG_X86_32
27cc2a81 515 "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx\n",
6f4d368e
HH
516#else
517 "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n",
518#endif
519 task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG,
520 tsk->comm, task_pid_nr(tsk), address, regs->ip,
521 regs->sp, error_code);
abd4f750 522 }
1da177e4
LT
523 tsk->thread.cr2 = address;
524 /* Kernel addresses are always protection faults */
525 tsk->thread.error_code = error_code | (address >= TASK_SIZE);
526 tsk->thread.trap_no = 14;
869f96a0 527 force_sig_info_fault(SIGSEGV, si_code, address, tsk);
1da177e4
LT
528 return;
529 }
530
531#ifdef CONFIG_X86_F00F_BUG
532 /*
533 * Pentium F0 0F C7 C8 bug workaround.
534 */
535 if (boot_cpu_data.f00f_bug) {
536 unsigned long nr;
33cb5243 537
1da177e4
LT
538 nr = (address - idt_descr.address) >> 3;
539
540 if (nr == 6) {
541 do_invalid_op(regs, 0);
542 return;
543 }
544 }
545#endif
546
547no_context:
548 /* Are we prepared to handle this kernel fault? */
549 if (fixup_exception(regs))
550 return;
551
33cb5243 552 /*
1da177e4 553 * Valid to do another page fault here, because if this fault
33cb5243 554 * had been triggered by is_prefetch fixup_exception would have
1da177e4
LT
555 * handled it.
556 */
33cb5243
HH
557 if (is_prefetch(regs, address, error_code))
558 return;
1da177e4 559
fdfe8aa8
HH
560 if (is_errata93(regs, address))
561 return;
562
1da177e4
LT
563/*
564 * Oops. The kernel tried to access some bad page. We'll have to
565 * terminate things with extreme prejudice.
566 */
567
568 bust_spinlocks(1);
569
dd287796 570 if (oops_may_print()) {
28609f6e
JB
571 __typeof__(pte_val(__pte(0))) page;
572
573#ifdef CONFIG_X86_PAE
318aa296 574 if (error_code & PF_INSTR) {
dd287796
AM
575 pte_t *pte = lookup_address(address);
576
577 if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
578 printk(KERN_CRIT "kernel tried to execute "
579 "NX-protected page - exploit attempt? "
580 "(uid: %d)\n", current->uid);
581 }
28609f6e 582#endif
dd287796
AM
583 if (address < PAGE_SIZE)
584 printk(KERN_ALERT "BUG: unable to handle kernel NULL "
585 "pointer dereference");
586 else
587 printk(KERN_ALERT "BUG: unable to handle kernel paging"
588 " request");
33cb5243 589 printk(" at virtual address %08lx\n", address);
65ea5b03 590 printk(KERN_ALERT "printing ip: %08lx ", regs->ip);
28609f6e
JB
591
592 page = read_cr3();
593 page = ((__typeof__(page) *) __va(page))[address >> PGDIR_SHIFT];
594#ifdef CONFIG_X86_PAE
9aa8d719 595 printk("*pdpt = %016Lx ", page);
28609f6e
JB
596 if ((page >> PAGE_SHIFT) < max_low_pfn
597 && page & _PAGE_PRESENT) {
598 page &= PAGE_MASK;
599 page = ((__typeof__(page) *) __va(page))[(address >> PMD_SHIFT)
600 & (PTRS_PER_PMD - 1)];
eec407c9 601 printk(KERN_CONT "*pde = %016Lx ", page);
28609f6e
JB
602 page &= ~_PAGE_NX;
603 }
604#else
9aa8d719 605 printk("*pde = %08lx ", page);
1da177e4 606#endif
28609f6e
JB
607
608 /*
609 * We must not directly access the pte in the highpte
610 * case if the page table is located in highmem.
611 * And let's rather not kmap-atomic the pte, just in case
612 * it's allocated already.
613 */
614 if ((page >> PAGE_SHIFT) < max_low_pfn
b1992df3
JB
615 && (page & _PAGE_PRESENT)
616 && !(page & _PAGE_PSE)) {
28609f6e
JB
617 page &= PAGE_MASK;
618 page = ((__typeof__(page) *) __va(page))[(address >> PAGE_SHIFT)
619 & (PTRS_PER_PTE - 1)];
9aa8d719 620 printk("*pte = %0*Lx ", sizeof(page)*2, (u64)page);
28609f6e 621 }
9aa8d719
PE
622
623 printk("\n");
28609f6e
JB
624 }
625
4f339ecb
AN
626 tsk->thread.cr2 = address;
627 tsk->thread.trap_no = 14;
628 tsk->thread.error_code = error_code;
1da177e4
LT
629 die("Oops", regs, error_code);
630 bust_spinlocks(0);
631 do_exit(SIGKILL);
632
633/*
634 * We ran out of memory, or some other thing happened to us that made
635 * us unable to handle the page fault gracefully.
636 */
637out_of_memory:
638 up_read(&mm->mmap_sem);
b460cbc5 639 if (is_global_init(tsk)) {
1da177e4
LT
640 yield();
641 down_read(&mm->mmap_sem);
642 goto survive;
643 }
644 printk("VM: killing process %s\n", tsk->comm);
318aa296 645 if (error_code & PF_USER)
dcca2bde 646 do_group_exit(SIGKILL);
1da177e4
LT
647 goto no_context;
648
649do_sigbus:
650 up_read(&mm->mmap_sem);
651
652 /* Kernel mode? Handle exceptions or die */
33cb5243 653 if (!(error_code & PF_USER))
1da177e4
LT
654 goto no_context;
655
656 /* User space => ok to do another page fault */
657 if (is_prefetch(regs, address, error_code))
658 return;
659
660 tsk->thread.cr2 = address;
661 tsk->thread.error_code = error_code;
662 tsk->thread.trap_no = 14;
869f96a0 663 force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk);
101f12af 664}
1da177e4 665
101f12af
JB
666void vmalloc_sync_all(void)
667{
668 /*
669 * Note that races in the updates of insync and start aren't
670 * problematic: insync can only get set bits added, and updates to
671 * start are only improving performance (without affecting correctness
672 * if undone).
673 */
674 static DECLARE_BITMAP(insync, PTRS_PER_PGD);
675 static unsigned long start = TASK_SIZE;
676 unsigned long address;
1da177e4 677
5311ab62
JF
678 if (SHARED_KERNEL_PMD)
679 return;
680
101f12af
JB
681 BUILD_BUG_ON(TASK_SIZE & ~PGDIR_MASK);
682 for (address = start; address >= TASK_SIZE; address += PGDIR_SIZE) {
683 if (!test_bit(pgd_index(address), insync)) {
684 unsigned long flags;
685 struct page *page;
686
687 spin_lock_irqsave(&pgd_lock, flags);
688 for (page = pgd_list; page; page =
689 (struct page *)page->index)
690 if (!vmalloc_sync_one(page_address(page),
691 address)) {
692 BUG_ON(page != pgd_list);
693 break;
694 }
695 spin_unlock_irqrestore(&pgd_lock, flags);
696 if (!page)
697 set_bit(pgd_index(address), insync);
698 }
699 if (address == start && test_bit(pgd_index(address), insync))
700 start = address + PGDIR_SIZE;
1da177e4
LT
701 }
702}