Merge tag 'v4.9.209' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux...
[platform/kernel/linux-amlogic.git] / arch / arm64 / mm / fault.c
1 /*
2  * Based on arch/arm/mm/fault.c
3  *
4  * Copyright (C) 1995  Linus Torvalds
5  * Copyright (C) 1995-2004 Russell King
6  * Copyright (C) 2012 ARM Ltd.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <linux/extable.h>
22 #include <linux/signal.h>
23 #include <linux/mm.h>
24 #include <linux/hardirq.h>
25 #include <linux/init.h>
26 #include <linux/kprobes.h>
27 #include <linux/uaccess.h>
28 #include <linux/page-flags.h>
29 #include <linux/sched.h>
30 #include <linux/highmem.h>
31 #include <linux/perf_event.h>
32 #include <linux/preempt.h>
33
34 #include <asm/bug.h>
35 #include <asm/cpufeature.h>
36 #include <asm/exception.h>
37 #include <asm/debug-monitors.h>
38 #include <asm/esr.h>
39 #include <asm/sysreg.h>
40 #include <asm/system_misc.h>
41 #include <asm/pgtable.h>
42 #include <asm/tlbflush.h>
43
44 struct fault_info {
45         int     (*fn)(unsigned long addr, unsigned int esr,
46                       struct pt_regs *regs);
47         int     sig;
48         int     code;
49         const char *name;
50 };
51
52 static const struct fault_info fault_info[];
53
54 static inline const struct fault_info *esr_to_fault_info(unsigned int esr)
55 {
56         return fault_info + (esr & 63);
57 }
58
59 #ifdef CONFIG_KPROBES
60 static inline int notify_page_fault(struct pt_regs *regs, unsigned int esr)
61 {
62         int ret = 0;
63
64         /* kprobe_running() needs smp_processor_id() */
65         if (!user_mode(regs)) {
66                 preempt_disable();
67                 if (kprobe_running() && kprobe_fault_handler(regs, esr))
68                         ret = 1;
69                 preempt_enable();
70         }
71
72         return ret;
73 }
74 #else
75 static inline int notify_page_fault(struct pt_regs *regs, unsigned int esr)
76 {
77         return 0;
78 }
79 #endif
80
81 /*
82  * Dump out the page tables associated with 'addr' in the currently active mm.
83  */
84 void show_pte(unsigned long addr)
85 {
86         struct mm_struct *mm;
87         pgd_t *pgd;
88
89         if (addr < TASK_SIZE) {
90                 /* TTBR0 */
91                 mm = current->active_mm;
92                 if (mm == &init_mm) {
93                         pr_alert("[%016lx] user address but active_mm is swapper\n",
94                                  addr);
95                         return;
96                 }
97         } else if (addr >= VA_START) {
98                 /* TTBR1 */
99                 mm = &init_mm;
100         } else {
101                 pr_alert("[%016lx] address between user and kernel address ranges\n",
102                          addr);
103                 return;
104         }
105
106         pr_alert("pgd = %p\n", mm->pgd);
107         pgd = pgd_offset(mm, addr);
108         pr_alert("[%016lx] *pgd=%016llx", addr, pgd_val(*pgd));
109
110         do {
111                 pud_t *pud;
112                 pmd_t *pmd;
113                 pte_t *pte;
114
115                 if (pgd_none(*pgd) || pgd_bad(*pgd))
116                         break;
117
118                 pud = pud_offset(pgd, addr);
119                 pr_cont(", *pud=%016llx", pud_val(*pud));
120                 if (pud_none(*pud) || pud_bad(*pud))
121                         break;
122
123                 pmd = pmd_offset(pud, addr);
124                 pr_cont(", *pmd=%016llx", pmd_val(*pmd));
125                 if (pmd_none(*pmd) || pmd_bad(*pmd))
126                         break;
127
128                 pte = pte_offset_map(pmd, addr);
129                 pr_cont(", *pte=%016llx", pte_val(*pte));
130                 pte_unmap(pte);
131         } while(0);
132
133         pr_cont("\n");
134 }
135
136 #ifdef CONFIG_ARM64_HW_AFDBM
137 /*
138  * This function sets the access flags (dirty, accessed), as well as write
139  * permission, and only to a more permissive setting.
140  *
141  * It needs to cope with hardware update of the accessed/dirty state by other
142  * agents in the system and can safely skip the __sync_icache_dcache() call as,
143  * like set_pte_at(), the PTE is never changed from no-exec to exec here.
144  *
145  * Returns whether or not the PTE actually changed.
146  */
147 int ptep_set_access_flags(struct vm_area_struct *vma,
148                           unsigned long address, pte_t *ptep,
149                           pte_t entry, int dirty)
150 {
151         pteval_t old_pteval;
152         unsigned int tmp;
153
154         if (pte_same(*ptep, entry))
155                 return 0;
156
157         /* only preserve the access flags and write permission */
158         pte_val(entry) &= PTE_AF | PTE_WRITE | PTE_DIRTY;
159
160         /*
161          * PTE_RDONLY is cleared by default in the asm below, so set it in
162          * back if necessary (read-only or clean PTE).
163          */
164         if (!pte_write(entry) || !pte_sw_dirty(entry))
165                 pte_val(entry) |= PTE_RDONLY;
166
167         /*
168          * Setting the flags must be done atomically to avoid racing with the
169          * hardware update of the access/dirty state.
170          */
171         asm volatile("//        ptep_set_access_flags\n"
172         "       prfm    pstl1strm, %2\n"
173         "1:     ldxr    %0, %2\n"
174         "       and     %0, %0, %3              // clear PTE_RDONLY\n"
175         "       orr     %0, %0, %4              // set flags\n"
176         "       stxr    %w1, %0, %2\n"
177         "       cbnz    %w1, 1b\n"
178         : "=&r" (old_pteval), "=&r" (tmp), "+Q" (pte_val(*ptep))
179         : "L" (~PTE_RDONLY), "r" (pte_val(entry)));
180
181         flush_tlb_fix_spurious_fault(vma, address);
182         return 1;
183 }
184 #endif
185
186 #ifdef CONFIG_AMLOGIC_USER_FAULT
187 static long get_user_pfn(struct mm_struct *mm, unsigned long addr)
188 {
189         long pfn = -1;
190         pgd_t *pgd;
191
192         if (!mm || addr >= VMALLOC_START)
193                 mm = &init_mm;
194
195         pgd = pgd_offset(mm, addr);
196
197         do {
198                 pud_t *pud;
199                 pmd_t *pmd;
200                 pte_t *pte;
201
202                 if (pgd_none(*pgd) || pgd_bad(*pgd))
203                         break;
204
205                 pud = pud_offset(pgd, addr);
206                 if (pud_none(*pud) || pud_bad(*pud))
207                         break;
208
209                 pmd = pmd_offset(pud, addr);
210                 if (pmd_none(*pmd) || pmd_bad(*pmd))
211                         break;
212
213                 pte = pte_offset_map(pmd, addr);
214                 pfn = pte_pfn(*pte);
215                 pte_unmap(pte);
216         } while (0);
217
218         return pfn;
219 }
220 #endif /* CONFIG_AMLOGIC_USER_FAULT */
221
222
223 static bool is_el1_instruction_abort(unsigned int esr)
224 {
225         return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_CUR;
226 }
227
228 /*
229  * The kernel tried to access some page that wasn't present.
230  */
231 static void __do_kernel_fault(unsigned long addr, unsigned int esr,
232                               struct pt_regs *regs)
233 {
234         /*
235          * Are we prepared to handle this kernel fault?
236          * We are almost certainly not prepared to handle instruction faults.
237          */
238         if (!is_el1_instruction_abort(esr) && fixup_exception(regs))
239                 return;
240
241         /*
242          * No handler, we'll have to terminate things with extreme prejudice.
243          */
244         bust_spinlocks(1);
245         pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
246                  (addr < PAGE_SIZE) ? "NULL pointer dereference" :
247                  "paging request", addr);
248
249         show_pte(addr);
250         die("Oops", regs, esr);
251         bust_spinlocks(0);
252         do_exit(SIGKILL);
253 }
254
255 #ifdef CONFIG_AMLOGIC_USER_FAULT
256 void show_all_pfn(struct task_struct *task, struct pt_regs *regs)
257 {
258         int i;
259         long pfn1;
260         char s1[10];
261         int top;
262
263         if (compat_user_mode(regs))
264                 top = 15;
265         else
266                 top = 31;
267         pr_info("reg              value       pfn  ");
268         pr_cont("reg              value       pfn\n");
269         for (i = 0; i < top; i++) {
270                 pfn1 = get_user_pfn(task->mm, regs->regs[i]);
271                 if (pfn1 >= 0)
272                         sprintf(s1, "%8lx", pfn1);
273                 else
274                         sprintf(s1, "--------");
275                 if (i % 2 == 1)
276                         pr_cont("r%-2d:  %016llx  %s\n", i, regs->regs[i], s1);
277                 else
278                         pr_info("r%-2d:  %016llx  %s  ", i, regs->regs[i], s1);
279         }
280         pr_cont("\n");
281         pfn1 = get_user_pfn(task->mm, regs->pc);
282         if (pfn1 >= 0)
283                 sprintf(s1, "%8lx", pfn1);
284         else
285                 sprintf(s1, "--------");
286         pr_info("pc :  %016llx  %s\n", regs->pc, s1);
287         pfn1 = get_user_pfn(task->mm, regs->sp);
288         if (pfn1 >= 0)
289                 sprintf(s1, "%8lx", pfn1);
290         else
291                 sprintf(s1, "--------");
292         pr_info("sp :  %016llx  %s\n", regs->sp, s1);
293
294         pfn1 = get_user_pfn(task->mm, regs->unused);
295         if (pfn1 >= 0)
296                 sprintf(s1, "%8lx", pfn1);
297         else
298                 sprintf(s1, "--------");
299         pr_info("unused :  %016llx  %s\n", regs->unused, s1);
300 }
301 #endif /* CONFIG_AMLOGIC_USER_FAULT */
302
303 /*
304  * Something tried to access memory that isn't in our memory map. User mode
305  * accesses just cause a SIGSEGV
306  */
307 static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
308                             unsigned int esr, unsigned int sig, int code,
309                             struct pt_regs *regs)
310 {
311         struct siginfo si;
312         const struct fault_info *inf;
313
314         if (unhandled_signal(tsk, sig) && show_unhandled_signals_ratelimited()) {
315                 inf = esr_to_fault_info(esr);
316                 pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
317                         tsk->comm, task_pid_nr(tsk), inf->name, sig,
318                         addr, esr);
319                 show_regs(regs);
320         }
321
322         tsk->thread.fault_address = addr;
323         tsk->thread.fault_code = esr;
324         si.si_signo = sig;
325         si.si_errno = 0;
326         si.si_code = code;
327         si.si_addr = (void __user *)addr;
328         force_sig_info(sig, &si, tsk);
329 }
330
331 static void do_bad_area(unsigned long addr, unsigned int esr, struct pt_regs *regs)
332 {
333         struct task_struct *tsk = current;
334         const struct fault_info *inf;
335
336         /*
337          * If we are in kernel mode at this point, we have no context to
338          * handle this fault with.
339          */
340         if (user_mode(regs)) {
341                 inf = esr_to_fault_info(esr);
342                 __do_user_fault(tsk, addr, esr, inf->sig, inf->code, regs);
343         } else
344                 __do_kernel_fault(addr, esr, regs);
345 }
346
347 #define VM_FAULT_BADMAP         0x010000
348 #define VM_FAULT_BADACCESS      0x020000
349
350 static int __do_page_fault(struct mm_struct *mm, unsigned long addr,
351                            unsigned int mm_flags, unsigned long vm_flags,
352                            struct task_struct *tsk)
353 {
354         struct vm_area_struct *vma;
355         int fault;
356
357         vma = find_vma(mm, addr);
358         fault = VM_FAULT_BADMAP;
359         if (unlikely(!vma))
360                 goto out;
361         if (unlikely(vma->vm_start > addr))
362                 goto check_stack;
363
364         /*
365          * Ok, we have a good vm_area for this memory access, so we can handle
366          * it.
367          */
368 good_area:
369         /*
370          * Check that the permissions on the VMA allow for the fault which
371          * occurred.
372          */
373         if (!(vma->vm_flags & vm_flags)) {
374                 fault = VM_FAULT_BADACCESS;
375                 goto out;
376         }
377
378         return handle_mm_fault(vma, addr & PAGE_MASK, mm_flags);
379
380 check_stack:
381         if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
382                 goto good_area;
383 out:
384         return fault;
385 }
386
387 static inline bool is_permission_fault(unsigned int esr, struct pt_regs *regs)
388 {
389         unsigned int ec       = ESR_ELx_EC(esr);
390         unsigned int fsc_type = esr & ESR_ELx_FSC_TYPE;
391
392         if (ec != ESR_ELx_EC_DABT_CUR && ec != ESR_ELx_EC_IABT_CUR)
393                 return false;
394
395         if (system_uses_ttbr0_pan())
396                 return fsc_type == ESR_ELx_FSC_FAULT &&
397                         (regs->pstate & PSR_PAN_BIT);
398         else
399                 return fsc_type == ESR_ELx_FSC_PERM;
400 }
401
402 static bool is_el0_instruction_abort(unsigned int esr)
403 {
404         return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_LOW;
405 }
406
407 static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
408                                    struct pt_regs *regs)
409 {
410         struct task_struct *tsk;
411         struct mm_struct *mm;
412         int fault, sig, code;
413         unsigned long vm_flags = VM_READ | VM_WRITE | VM_EXEC;
414         unsigned int mm_flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
415
416         if (notify_page_fault(regs, esr))
417                 return 0;
418
419         tsk = current;
420         mm  = tsk->mm;
421
422         /*
423          * If we're in an interrupt or have no user context, we must not take
424          * the fault.
425          */
426         if (faulthandler_disabled() || !mm)
427                 goto no_context;
428
429         if (user_mode(regs))
430                 mm_flags |= FAULT_FLAG_USER;
431
432         if (is_el0_instruction_abort(esr)) {
433                 vm_flags = VM_EXEC;
434         } else if ((esr & ESR_ELx_WNR) && !(esr & ESR_ELx_CM)) {
435                 vm_flags = VM_WRITE;
436                 mm_flags |= FAULT_FLAG_WRITE;
437         }
438
439         if (addr < TASK_SIZE && is_permission_fault(esr, regs)) {
440                 /* regs->orig_addr_limit may be 0 if we entered from EL0 */
441                 if (regs->orig_addr_limit == KERNEL_DS)
442                         die("Accessing user space memory with fs=KERNEL_DS", regs, esr);
443
444                 if (is_el1_instruction_abort(esr))
445                         die("Attempting to execute userspace memory", regs, esr);
446
447                 if (!search_exception_tables(regs->pc))
448                         die("Accessing user space memory outside uaccess.h routines", regs, esr);
449         }
450
451         /*
452          * As per x86, we may deadlock here. However, since the kernel only
453          * validly references user space from well defined areas of the code,
454          * we can bug out early if this is from code which shouldn't.
455          */
456         if (!down_read_trylock(&mm->mmap_sem)) {
457                 if (!user_mode(regs) && !search_exception_tables(regs->pc))
458                         goto no_context;
459 retry:
460                 down_read(&mm->mmap_sem);
461         } else {
462                 /*
463                  * The above down_read_trylock() might have succeeded in which
464                  * case, we'll have missed the might_sleep() from down_read().
465                  */
466                 might_sleep();
467 #ifdef CONFIG_DEBUG_VM
468                 if (!user_mode(regs) && !search_exception_tables(regs->pc))
469                         goto no_context;
470 #endif
471         }
472
473         fault = __do_page_fault(mm, addr, mm_flags, vm_flags, tsk);
474
475         /*
476          * If we need to retry but a fatal signal is pending, handle the
477          * signal first. We do not need to release the mmap_sem because it
478          * would already be released in __lock_page_or_retry in mm/filemap.c.
479          */
480         if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
481                 if (!user_mode(regs))
482                         goto no_context;
483                 return 0;
484         }
485
486         /*
487          * Major/minor page fault accounting is only done on the initial
488          * attempt. If we go through a retry, it is extremely likely that the
489          * page will be found in page cache at that point.
490          */
491
492         perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
493         if (mm_flags & FAULT_FLAG_ALLOW_RETRY) {
494                 if (fault & VM_FAULT_MAJOR) {
495                         tsk->maj_flt++;
496                         perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs,
497                                       addr);
498                 } else {
499                         tsk->min_flt++;
500                         perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, regs,
501                                       addr);
502                 }
503                 if (fault & VM_FAULT_RETRY) {
504                         /*
505                          * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk of
506                          * starvation.
507                          */
508                         mm_flags &= ~FAULT_FLAG_ALLOW_RETRY;
509                         mm_flags |= FAULT_FLAG_TRIED;
510                         goto retry;
511                 }
512         }
513
514         up_read(&mm->mmap_sem);
515
516         /*
517          * Handle the "normal" case first - VM_FAULT_MAJOR
518          */
519         if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP |
520                               VM_FAULT_BADACCESS))))
521                 return 0;
522
523         /*
524          * If we are in kernel mode at this point, we have no context to
525          * handle this fault with.
526          */
527         if (!user_mode(regs))
528                 goto no_context;
529
530         if (fault & VM_FAULT_OOM) {
531                 /*
532                  * We ran out of memory, call the OOM killer, and return to
533                  * userspace (which will retry the fault, or kill us if we got
534                  * oom-killed).
535                  */
536                 pagefault_out_of_memory();
537                 return 0;
538         }
539
540         if (fault & VM_FAULT_SIGBUS) {
541                 /*
542                  * We had some memory, but were unable to successfully fix up
543                  * this page fault.
544                  */
545                 sig = SIGBUS;
546                 code = BUS_ADRERR;
547         } else {
548                 /*
549                  * Something tried to access memory that isn't in our memory
550                  * map.
551                  */
552                 sig = SIGSEGV;
553                 code = fault == VM_FAULT_BADACCESS ?
554                         SEGV_ACCERR : SEGV_MAPERR;
555         }
556
557         __do_user_fault(tsk, addr, esr, sig, code, regs);
558         return 0;
559
560 no_context:
561         __do_kernel_fault(addr, esr, regs);
562         return 0;
563 }
564
565 /*
566  * First Level Translation Fault Handler
567  *
568  * We enter here because the first level page table doesn't contain a valid
569  * entry for the address.
570  *
571  * If the address is in kernel space (>= TASK_SIZE), then we are probably
572  * faulting in the vmalloc() area.
573  *
574  * If the init_task's first level page tables contains the relevant entry, we
575  * copy the it to this task.  If not, we send the process a signal, fixup the
576  * exception, or oops the kernel.
577  *
578  * NOTE! We MUST NOT take any locks for this case. We may be in an interrupt
579  * or a critical region, and should only copy the information from the master
580  * page table, nothing more.
581  */
582 static int __kprobes do_translation_fault(unsigned long addr,
583                                           unsigned int esr,
584                                           struct pt_regs *regs)
585 {
586         if (addr < TASK_SIZE)
587                 return do_page_fault(addr, esr, regs);
588
589         do_bad_area(addr, esr, regs);
590         return 0;
591 }
592
593 static int do_alignment_fault(unsigned long addr, unsigned int esr,
594                               struct pt_regs *regs)
595 {
596         do_bad_area(addr, esr, regs);
597         return 0;
598 }
599
600 /*
601  * This abort handler always returns "fault".
602  */
603 static int do_bad(unsigned long addr, unsigned int esr, struct pt_regs *regs)
604 {
605         return 1;
606 }
607
608 static const struct fault_info fault_info[] = {
609         { do_bad,               SIGBUS,  0,             "ttbr address size fault"       },
610         { do_bad,               SIGBUS,  0,             "level 1 address size fault"    },
611         { do_bad,               SIGBUS,  0,             "level 2 address size fault"    },
612         { do_bad,               SIGBUS,  0,             "level 3 address size fault"    },
613         { do_translation_fault, SIGSEGV, SEGV_MAPERR,   "level 0 translation fault"     },
614         { do_translation_fault, SIGSEGV, SEGV_MAPERR,   "level 1 translation fault"     },
615         { do_translation_fault, SIGSEGV, SEGV_MAPERR,   "level 2 translation fault"     },
616         { do_translation_fault, SIGSEGV, SEGV_MAPERR,   "level 3 translation fault"     },
617         { do_bad,               SIGBUS,  0,             "unknown 8"                     },
618         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "level 1 access flag fault"     },
619         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "level 2 access flag fault"     },
620         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "level 3 access flag fault"     },
621         { do_bad,               SIGBUS,  0,             "unknown 12"                    },
622         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "level 1 permission fault"      },
623         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "level 2 permission fault"      },
624         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "level 3 permission fault"      },
625         { do_bad,               SIGBUS,  0,             "synchronous external abort"    },
626         { do_bad,               SIGBUS,  0,             "unknown 17"                    },
627         { do_bad,               SIGBUS,  0,             "unknown 18"                    },
628         { do_bad,               SIGBUS,  0,             "unknown 19"                    },
629         { do_bad,               SIGBUS,  0,             "synchronous abort (translation table walk)" },
630         { do_bad,               SIGBUS,  0,             "synchronous abort (translation table walk)" },
631         { do_bad,               SIGBUS,  0,             "synchronous abort (translation table walk)" },
632         { do_bad,               SIGBUS,  0,             "synchronous abort (translation table walk)" },
633         { do_bad,               SIGBUS,  0,             "synchronous parity error"      },
634         { do_bad,               SIGBUS,  0,             "unknown 25"                    },
635         { do_bad,               SIGBUS,  0,             "unknown 26"                    },
636         { do_bad,               SIGBUS,  0,             "unknown 27"                    },
637         { do_bad,               SIGBUS,  0,             "synchronous parity error (translation table walk)" },
638         { do_bad,               SIGBUS,  0,             "synchronous parity error (translation table walk)" },
639         { do_bad,               SIGBUS,  0,             "synchronous parity error (translation table walk)" },
640         { do_bad,               SIGBUS,  0,             "synchronous parity error (translation table walk)" },
641         { do_bad,               SIGBUS,  0,             "unknown 32"                    },
642         { do_alignment_fault,   SIGBUS,  BUS_ADRALN,    "alignment fault"               },
643         { do_bad,               SIGBUS,  0,             "unknown 34"                    },
644         { do_bad,               SIGBUS,  0,             "unknown 35"                    },
645         { do_bad,               SIGBUS,  0,             "unknown 36"                    },
646         { do_bad,               SIGBUS,  0,             "unknown 37"                    },
647         { do_bad,               SIGBUS,  0,             "unknown 38"                    },
648         { do_bad,               SIGBUS,  0,             "unknown 39"                    },
649         { do_bad,               SIGBUS,  0,             "unknown 40"                    },
650         { do_bad,               SIGBUS,  0,             "unknown 41"                    },
651         { do_bad,               SIGBUS,  0,             "unknown 42"                    },
652         { do_bad,               SIGBUS,  0,             "unknown 43"                    },
653         { do_bad,               SIGBUS,  0,             "unknown 44"                    },
654         { do_bad,               SIGBUS,  0,             "unknown 45"                    },
655         { do_bad,               SIGBUS,  0,             "unknown 46"                    },
656         { do_bad,               SIGBUS,  0,             "unknown 47"                    },
657         { do_bad,               SIGBUS,  0,             "TLB conflict abort"            },
658         { do_bad,               SIGBUS,  0,             "unknown 49"                    },
659         { do_bad,               SIGBUS,  0,             "unknown 50"                    },
660         { do_bad,               SIGBUS,  0,             "unknown 51"                    },
661         { do_bad,               SIGBUS,  0,             "implementation fault (lockdown abort)" },
662         { do_bad,               SIGBUS,  0,             "implementation fault (unsupported exclusive)" },
663         { do_bad,               SIGBUS,  0,             "unknown 54"                    },
664         { do_bad,               SIGBUS,  0,             "unknown 55"                    },
665         { do_bad,               SIGBUS,  0,             "unknown 56"                    },
666         { do_bad,               SIGBUS,  0,             "unknown 57"                    },
667         { do_bad,               SIGBUS,  0,             "unknown 58"                    },
668         { do_bad,               SIGBUS,  0,             "unknown 59"                    },
669         { do_bad,               SIGBUS,  0,             "unknown 60"                    },
670         { do_bad,               SIGBUS,  0,             "section domain fault"          },
671         { do_bad,               SIGBUS,  0,             "page domain fault"             },
672         { do_bad,               SIGBUS,  0,             "unknown 63"                    },
673 };
674
675 #ifdef CONFIG_AMLOGIC_VMAP
676 asmlinkage static void die_wrap(const struct fault_info *inf,
677                                 struct pt_regs *regs, unsigned int esr,
678                                 unsigned long addr)
679 {
680         struct siginfo info;
681
682         info.si_signo = inf->sig;
683         info.si_errno = 0;
684         info.si_code  = inf->code;
685         info.si_addr  = (void __user *)addr;
686         arm64_notify_die("", regs, &info, esr);
687 }
688 #endif
689 /*
690  * Dispatch a data abort to the relevant handler.
691  */
692 asmlinkage void __exception do_mem_abort(unsigned long addr, unsigned int esr,
693                                          struct pt_regs *regs)
694 {
695         const struct fault_info *inf = esr_to_fault_info(esr);
696 #ifndef CONFIG_AMLOGIC_VMAP
697         struct siginfo info;
698 #endif
699
700         if (!inf->fn(addr, esr, regs))
701                 return;
702
703         pr_alert("Unhandled fault: %s (0x%08x) at 0x%016lx\n",
704                  inf->name, esr, addr);
705
706 #ifndef CONFIG_AMLOGIC_VMAP
707         info.si_signo = inf->sig;
708         info.si_errno = 0;
709         info.si_code  = inf->code;
710         info.si_addr  = (void __user *)addr;
711         arm64_notify_die("", regs, &info, esr);
712 #else
713         die_wrap(inf, regs, esr, addr);
714 #endif
715 }
716
717 asmlinkage void __exception do_el0_irq_bp_hardening(void)
718 {
719         /* PC has already been checked in entry.S */
720         arm64_apply_bp_hardening();
721 }
722
723 asmlinkage void __exception do_el0_ia_bp_hardening(unsigned long addr,
724                                                    unsigned int esr,
725                                                    struct pt_regs *regs)
726 {
727         /*
728          * We've taken an instruction abort from userspace and not yet
729          * re-enabled IRQs. If the address is a kernel address, apply
730          * BP hardening prior to enabling IRQs and pre-emption.
731          */
732         if (addr > TASK_SIZE)
733                 arm64_apply_bp_hardening();
734
735         local_irq_enable();
736         do_mem_abort(addr, esr, regs);
737 }
738
739
740 /*
741  * Handle stack alignment exceptions.
742  */
743 asmlinkage void __exception do_sp_pc_abort(unsigned long addr,
744                                            unsigned int esr,
745                                            struct pt_regs *regs)
746 {
747         struct siginfo info;
748         struct task_struct *tsk = current;
749
750         if (user_mode(regs)) {
751                 if (instruction_pointer(regs) > TASK_SIZE)
752                         arm64_apply_bp_hardening();
753                 local_irq_enable();
754         }
755
756         if (show_unhandled_signals && unhandled_signal(tsk, SIGBUS))
757                 pr_info_ratelimited("%s[%d]: %s exception: pc=%p sp=%p\n",
758                                     tsk->comm, task_pid_nr(tsk),
759                                     esr_get_class_string(esr), (void *)regs->pc,
760                                     (void *)regs->sp);
761
762         info.si_signo = SIGBUS;
763         info.si_errno = 0;
764         info.si_code  = BUS_ADRALN;
765         info.si_addr  = (void __user *)addr;
766         arm64_notify_die("Oops - SP/PC alignment exception", regs, &info, esr);
767 }
768
769 int __init early_brk64(unsigned long addr, unsigned int esr,
770                        struct pt_regs *regs);
771
772 /*
773  * __refdata because early_brk64 is __init, but the reference to it is
774  * clobbered at arch_initcall time.
775  * See traps.c and debug-monitors.c:debug_traps_init().
776  */
777 static struct fault_info __refdata debug_fault_info[] = {
778         { do_bad,       SIGTRAP,        TRAP_HWBKPT,    "hardware breakpoint"   },
779         { do_bad,       SIGTRAP,        TRAP_HWBKPT,    "hardware single-step"  },
780         { do_bad,       SIGTRAP,        TRAP_HWBKPT,    "hardware watchpoint"   },
781         { do_bad,       SIGBUS,         0,              "unknown 3"             },
782         { do_bad,       SIGTRAP,        TRAP_BRKPT,     "aarch32 BKPT"          },
783         { do_bad,       SIGTRAP,        0,              "aarch32 vector catch"  },
784         { early_brk64,  SIGTRAP,        TRAP_BRKPT,     "aarch64 BRK"           },
785         { do_bad,       SIGBUS,         0,              "unknown 7"             },
786 };
787
788 void __init hook_debug_fault_code(int nr,
789                                   int (*fn)(unsigned long, unsigned int, struct pt_regs *),
790                                   int sig, int code, const char *name)
791 {
792         BUG_ON(nr < 0 || nr >= ARRAY_SIZE(debug_fault_info));
793
794         debug_fault_info[nr].fn         = fn;
795         debug_fault_info[nr].sig        = sig;
796         debug_fault_info[nr].code       = code;
797         debug_fault_info[nr].name       = name;
798 }
799
800 asmlinkage int __exception do_debug_exception(unsigned long addr_if_watchpoint,
801                                               unsigned int esr,
802                                               struct pt_regs *regs)
803 {
804         const struct fault_info *inf = debug_fault_info + DBG_ESR_EVT(esr);
805         unsigned long pc = instruction_pointer(regs);
806         struct siginfo info;
807         int rv;
808
809         /*
810          * Tell lockdep we disabled irqs in entry.S. Do nothing if they were
811          * already disabled to preserve the last enabled/disabled addresses.
812          */
813         if (interrupts_enabled(regs))
814                 trace_hardirqs_off();
815
816         if (user_mode(regs) && pc > TASK_SIZE)
817                 arm64_apply_bp_hardening();
818
819         if (!inf->fn(addr_if_watchpoint, esr, regs)) {
820                 rv = 1;
821         } else {
822                 pr_alert("Unhandled debug exception: %s (0x%08x) at 0x%016lx\n",
823                          inf->name, esr, pc);
824
825                 info.si_signo = inf->sig;
826                 info.si_errno = 0;
827                 info.si_code  = inf->code;
828                 info.si_addr  = (void __user *)pc;
829                 arm64_notify_die("", regs, &info, 0);
830                 rv = 0;
831         }
832
833         if (interrupts_enabled(regs))
834                 trace_hardirqs_on();
835
836         return rv;
837 }
838 NOKPROBE_SYMBOL(do_debug_exception);
839
840 #ifdef CONFIG_ARM64_PAN
841 int cpu_enable_pan(void *__unused)
842 {
843         /*
844          * We modify PSTATE. This won't work from irq context as the PSTATE
845          * is discarded once we return from the exception.
846          */
847         WARN_ON_ONCE(in_interrupt());
848
849         config_sctlr_el1(SCTLR_EL1_SPAN, 0);
850         asm(SET_PSTATE_PAN(1));
851         return 0;
852 }
853 #endif /* CONFIG_ARM64_PAN */
854
855 #ifdef CONFIG_ARM64_UAO
856 /*
857  * Kernel threads have fs=KERNEL_DS by default, and don't need to call
858  * set_fs(), devtmpfs in particular relies on this behaviour.
859  * We need to enable the feature at runtime (instead of adding it to
860  * PSR_MODE_EL1h) as the feature may not be implemented by the cpu.
861  */
862 int cpu_enable_uao(void *__unused)
863 {
864         asm(SET_PSTATE_UAO(1));
865         return 0;
866 }
867 #endif /* CONFIG_ARM64_UAO */