1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <linux/signal.h>
19#include <linux/sched.h>
20#include <linux/sched/task_stack.h>
21#include <linux/kernel.h>
22#include <linux/errno.h>
23#include <linux/string.h>
24#include <linux/types.h>
25#include <linux/ptrace.h>
26#include <linux/mman.h>
27#include <linux/mm.h>
28#include <linux/interrupt.h>
29#include <linux/highmem.h>
30#include <linux/extable.h>
31#include <linux/kprobes.h>
32#include <linux/kdebug.h>
33#include <linux/perf_event.h>
34#include <linux/ratelimit.h>
35#include <linux/context_tracking.h>
36#include <linux/hugetlb.h>
37#include <linux/uaccess.h>
38
39#include <asm/firmware.h>
40#include <asm/page.h>
41#include <asm/pgtable.h>
42#include <asm/mmu.h>
43#include <asm/mmu_context.h>
44#include <asm/tlbflush.h>
45#include <asm/siginfo.h>
46#include <asm/debug.h>
47
48static inline bool notify_page_fault(struct pt_regs *regs)
49{
50 bool ret = false;
51
52#ifdef CONFIG_KPROBES
53
54 if (!user_mode(regs)) {
55 preempt_disable();
56 if (kprobe_running() && kprobe_fault_handler(regs, 11))
57 ret = true;
58 preempt_enable();
59 }
60#endif
61
62 if (unlikely(debugger_fault_handler(regs)))
63 ret = true;
64
65 return ret;
66}
67
68
69
70
71
72static bool store_updates_sp(struct pt_regs *regs)
73{
74 unsigned int inst;
75
76 if (get_user(inst, (unsigned int __user *)regs->nip))
77 return false;
78
79 if (((inst >> 16) & 0x1f) != 1)
80 return false;
81
82 switch (inst >> 26) {
83 case 37:
84 case 39:
85 case 45:
86 case 53:
87 case 55:
88 return true;
89 case 62:
90 return (inst & 3) == 1;
91 case 31:
92
93 switch ((inst >> 1) & 0x3ff) {
94 case 181:
95 case 183:
96 case 247:
97 case 439:
98 case 695:
99 case 759:
100 return true;
101 }
102 }
103 return false;
104}
105
106
107
108
109static int
110__bad_area_nosemaphore(struct pt_regs *regs, unsigned long address, int si_code)
111{
112
113
114
115
116
117 if (!user_mode(regs))
118 return SIGSEGV;
119
120 _exception(SIGSEGV, regs, si_code, address);
121
122 return 0;
123}
124
125static noinline int bad_area_nosemaphore(struct pt_regs *regs, unsigned long address)
126{
127 return __bad_area_nosemaphore(regs, address, SEGV_MAPERR);
128}
129
130static int __bad_area(struct pt_regs *regs, unsigned long address, int si_code)
131{
132 struct mm_struct *mm = current->mm;
133
134
135
136
137
138 up_read(&mm->mmap_sem);
139
140 return __bad_area_nosemaphore(regs, address, si_code);
141}
142
143static noinline int bad_area(struct pt_regs *regs, unsigned long address)
144{
145 return __bad_area(regs, address, SEGV_MAPERR);
146}
147
148static noinline int bad_access(struct pt_regs *regs, unsigned long address)
149{
150 return __bad_area(regs, address, SEGV_ACCERR);
151}
152
153static int do_sigbus(struct pt_regs *regs, unsigned long address,
154 unsigned int fault)
155{
156 siginfo_t info;
157 unsigned int lsb = 0;
158
159 if (!user_mode(regs))
160 return SIGBUS;
161
162 current->thread.trap_nr = BUS_ADRERR;
163 info.si_signo = SIGBUS;
164 info.si_errno = 0;
165 info.si_code = BUS_ADRERR;
166 info.si_addr = (void __user *)address;
167#ifdef CONFIG_MEMORY_FAILURE
168 if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
169 pr_err("MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n",
170 current->comm, current->pid, address);
171 info.si_code = BUS_MCEERR_AR;
172 }
173
174 if (fault & VM_FAULT_HWPOISON_LARGE)
175 lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));
176 if (fault & VM_FAULT_HWPOISON)
177 lsb = PAGE_SHIFT;
178#endif
179 info.si_addr_lsb = lsb;
180 force_sig_info(SIGBUS, &info, current);
181 return 0;
182}
183
184static int mm_fault_error(struct pt_regs *regs, unsigned long addr, int fault)
185{
186
187
188
189
190 if (fatal_signal_pending(current) && !user_mode(regs))
191 return SIGKILL;
192
193
194 if (fault & VM_FAULT_OOM) {
195
196
197
198
199 if (!user_mode(regs))
200 return SIGSEGV;
201 pagefault_out_of_memory();
202 } else {
203 if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|
204 VM_FAULT_HWPOISON_LARGE))
205 return do_sigbus(regs, addr, fault);
206 else if (fault & VM_FAULT_SIGSEGV)
207 return bad_area_nosemaphore(regs, addr);
208 else
209 BUG();
210 }
211 return 0;
212}
213
214
215static bool bad_kernel_fault(bool is_exec, unsigned long error_code,
216 unsigned long address)
217{
218 if (is_exec && (error_code & (DSISR_NOEXEC_OR_G | DSISR_KEYFAULT))) {
219 printk_ratelimited(KERN_CRIT "kernel tried to execute"
220 " exec-protected page (%lx) -"
221 "exploit attempt? (uid: %d)\n",
222 address, from_kuid(&init_user_ns,
223 current_uid()));
224 }
225 return is_exec || (address >= TASK_SIZE);
226}
227
228static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address,
229 struct vm_area_struct *vma,
230 bool store_update_sp)
231{
232
233
234
235
236
237
238
239
240
241 if (address + 0x100000 < vma->vm_end) {
242
243 struct pt_regs *uregs = current->thread.regs;
244 if (uregs == NULL)
245 return true;
246
247
248
249
250
251
252
253
254
255
256
257
258
259 if (address + 2048 < uregs->gpr[1] && !store_update_sp)
260 return true;
261 }
262 return false;
263}
264
265static bool access_error(bool is_write, bool is_exec,
266 struct vm_area_struct *vma)
267{
268
269
270
271
272
273
274
275
276
277
278 if (is_exec) {
279 return !(vma->vm_flags & VM_EXEC) &&
280 (cpu_has_feature(CPU_FTR_NOEXECUTE) ||
281 !(vma->vm_flags & (VM_READ | VM_WRITE)));
282 }
283
284 if (is_write) {
285 if (unlikely(!(vma->vm_flags & VM_WRITE)))
286 return true;
287 return false;
288 }
289
290 if (unlikely(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))))
291 return true;
292
293 return false;
294}
295
296#ifdef CONFIG_PPC_SMLPAR
297static inline void cmo_account_page_fault(void)
298{
299 if (firmware_has_feature(FW_FEATURE_CMO)) {
300 u32 page_ins;
301
302 preempt_disable();
303 page_ins = be32_to_cpu(get_lppaca()->page_ins);
304 page_ins += 1 << PAGE_FACTOR;
305 get_lppaca()->page_ins = cpu_to_be32(page_ins);
306 preempt_enable();
307 }
308}
309#else
310static inline void cmo_account_page_fault(void) { }
311#endif
312
313#ifdef CONFIG_PPC_STD_MMU
314static void sanity_check_fault(bool is_write, unsigned long error_code)
315{
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345 if (!radix_enabled() && !is_write)
346 WARN_ON_ONCE(error_code & DSISR_PROTFAULT);
347}
348#else
349static void sanity_check_fault(bool is_write, unsigned long error_code) { }
350#endif
351
352
353
354
355
356#if (defined(CONFIG_4xx) || defined(CONFIG_BOOKE))
357#define page_fault_is_write(__err) ((__err) & ESR_DST)
358#define page_fault_is_bad(__err) (0)
359#else
360#define page_fault_is_write(__err) ((__err) & DSISR_ISSTORE)
361#if defined(CONFIG_PPC_8xx)
362#define page_fault_is_bad(__err) ((__err) & DSISR_NOEXEC_OR_G)
363#elif defined(CONFIG_PPC64)
364#define page_fault_is_bad(__err) ((__err) & DSISR_BAD_FAULT_64S)
365#else
366#define page_fault_is_bad(__err) ((__err) & DSISR_BAD_FAULT_32S)
367#endif
368#endif
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383static int __do_page_fault(struct pt_regs *regs, unsigned long address,
384 unsigned long error_code)
385{
386 struct vm_area_struct * vma;
387 struct mm_struct *mm = current->mm;
388 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
389 int is_exec = TRAP(regs) == 0x400;
390 int is_user = user_mode(regs);
391 int is_write = page_fault_is_write(error_code);
392 int fault, major = 0;
393 bool store_update_sp = false;
394
395 if (notify_page_fault(regs))
396 return 0;
397
398 if (unlikely(page_fault_is_bad(error_code))) {
399 if (is_user) {
400 _exception(SIGBUS, regs, BUS_OBJERR, address);
401 return 0;
402 }
403 return SIGBUS;
404 }
405
406
407 sanity_check_fault(is_write, error_code);
408
409
410
411
412
413 if (unlikely(!is_user && bad_kernel_fault(is_exec, error_code, address)))
414 return SIGSEGV;
415
416
417
418
419
420 if (unlikely(faulthandler_disabled() || !mm)) {
421 if (is_user)
422 printk_ratelimited(KERN_ERR "Page fault in user mode"
423 " with faulthandler_disabled()=%d"
424 " mm=%p\n",
425 faulthandler_disabled(), mm);
426 return bad_area_nosemaphore(regs, address);
427 }
428
429
430 if (!arch_irq_disabled_regs(regs))
431 local_irq_enable();
432
433 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
434
435
436
437
438
439
440 if (is_write && is_user)
441 store_update_sp = store_updates_sp(regs);
442
443 if (is_user)
444 flags |= FAULT_FLAG_USER;
445 if (is_write)
446 flags |= FAULT_FLAG_WRITE;
447 if (is_exec)
448 flags |= FAULT_FLAG_INSTRUCTION;
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465 if (unlikely(!down_read_trylock(&mm->mmap_sem))) {
466 if (!is_user && !search_exception_tables(regs->nip))
467 return bad_area_nosemaphore(regs, address);
468
469retry:
470 down_read(&mm->mmap_sem);
471 } else {
472
473
474
475
476
477 might_sleep();
478 }
479
480 vma = find_vma(mm, address);
481 if (unlikely(!vma))
482 return bad_area(regs, address);
483 if (likely(vma->vm_start <= address))
484 goto good_area;
485 if (unlikely(!(vma->vm_flags & VM_GROWSDOWN)))
486 return bad_area(regs, address);
487
488
489 if (unlikely(bad_stack_expansion(regs, address, vma, store_update_sp)))
490 return bad_area(regs, address);
491
492
493 if (unlikely(expand_stack(vma, address)))
494 return bad_area(regs, address);
495
496good_area:
497 if (unlikely(access_error(is_write, is_exec, vma)))
498 return bad_access(regs, address);
499
500
501
502
503
504
505 fault = handle_mm_fault(vma, address, flags);
506 major |= fault & VM_FAULT_MAJOR;
507
508
509
510
511
512 if (unlikely(fault & VM_FAULT_RETRY)) {
513
514 if (flags & FAULT_FLAG_ALLOW_RETRY) {
515
516
517
518
519 flags &= ~FAULT_FLAG_ALLOW_RETRY;
520 flags |= FAULT_FLAG_TRIED;
521 if (!fatal_signal_pending(current))
522 goto retry;
523 }
524
525
526
527
528
529 return is_user ? 0 : SIGBUS;
530 }
531
532 up_read(¤t->mm->mmap_sem);
533
534 if (unlikely(fault & VM_FAULT_ERROR))
535 return mm_fault_error(regs, address, fault);
536
537
538
539
540 if (major) {
541 current->maj_flt++;
542 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs, address);
543 cmo_account_page_fault();
544 } else {
545 current->min_flt++;
546 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, regs, address);
547 }
548 return 0;
549}
550NOKPROBE_SYMBOL(__do_page_fault);
551
552int do_page_fault(struct pt_regs *regs, unsigned long address,
553 unsigned long error_code)
554{
555 enum ctx_state prev_state = exception_enter();
556 int rc = __do_page_fault(regs, address, error_code);
557 exception_exit(prev_state);
558 return rc;
559}
560NOKPROBE_SYMBOL(do_page_fault);
561
562
563
564
565
566
567void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)
568{
569 const struct exception_table_entry *entry;
570
571
572 if ((entry = search_exception_tables(regs->nip)) != NULL) {
573 regs->nip = extable_fixup(entry);
574 return;
575 }
576
577
578
579 switch (regs->trap) {
580 case 0x300:
581 case 0x380:
582 printk(KERN_ALERT "Unable to handle kernel paging request for "
583 "data at address 0x%08lx\n", regs->dar);
584 break;
585 case 0x400:
586 case 0x480:
587 printk(KERN_ALERT "Unable to handle kernel paging request for "
588 "instruction fetch\n");
589 break;
590 case 0x600:
591 printk(KERN_ALERT "Unable to handle kernel paging request for "
592 "unaligned access at address 0x%08lx\n", regs->dar);
593 break;
594 default:
595 printk(KERN_ALERT "Unable to handle kernel paging request for "
596 "unknown fault\n");
597 break;
598 }
599 printk(KERN_ALERT "Faulting instruction address: 0x%08lx\n",
600 regs->nip);
601
602 if (task_stack_end_corrupted(current))
603 printk(KERN_ALERT "Thread overran stack, or stack corrupted\n");
604
605 die("Kernel access of bad area", regs, sig);
606}
607