1 // SPDX-License-Identifier: GPL-2.0-only
 
   3  *  linux/arch/arm/mm/fault.c
 
   5  *  Copyright (C) 1995  Linus Torvalds
 
   6  *  Modifications for ARM processor (c) 1995-2004 Russell King
 
   8 #include <linux/extable.h>
 
   9 #include <linux/signal.h>
 
  11 #include <linux/hardirq.h>
 
  12 #include <linux/init.h>
 
  13 #include <linux/kprobes.h>
 
  14 #include <linux/uaccess.h>
 
  15 #include <linux/page-flags.h>
 
  16 #include <linux/sched/signal.h>
 
  17 #include <linux/sched/debug.h>
 
  18 #include <linux/highmem.h>
 
  19 #include <linux/perf_event.h>
 
  20 #include <linux/kfence.h>
 
  22 #include <asm/system_misc.h>
 
  23 #include <asm/system_info.h>
 
  24 #include <asm/tlbflush.h>
 
  31  * This is useful to dump out the page tables associated with
 
  34 void show_pte(const char *lvl, struct mm_struct *mm, unsigned long addr)
 
  41         pgd = pgd_offset(mm, addr);
 
  42         printk("%s[%08lx] *pgd=%08llx", lvl, addr, (long long)pgd_val(*pgd));
 
  50                 p4d = p4d_offset(pgd, addr);
 
  59                 pud = pud_offset(p4d, addr);
 
  60                 if (PTRS_PER_PUD != 1)
 
  61                         pr_cont(", *pud=%08llx", (long long)pud_val(*pud));
 
  71                 pmd = pmd_offset(pud, addr);
 
  72                 if (PTRS_PER_PMD != 1)
 
  73                         pr_cont(", *pmd=%08llx", (long long)pmd_val(*pmd));
 
  83                 /* We must not map this if we have highmem enabled */
 
  84                 if (PageHighMem(pfn_to_page(pmd_val(*pmd) >> PAGE_SHIFT)))
 
  87                 pte = pte_offset_map(pmd, addr);
 
  88                 pr_cont(", *pte=%08llx", (long long)pte_val(*pte));
 
  89 #ifndef CONFIG_ARM_LPAE
 
  90                 pr_cont(", *ppte=%08llx",
 
  91                        (long long)pte_val(pte[PTE_HWTABLE_PTRS]));
 
  98 #else                                   /* CONFIG_MMU */
 
  99 void show_pte(const char *lvl, struct mm_struct *mm, unsigned long addr)
 
 101 #endif                                  /* CONFIG_MMU */
 
 103 static inline bool is_write_fault(unsigned int fsr)
 
 105         return (fsr & FSR_WRITE) && !(fsr & FSR_CM);
 
 108 static void die_kernel_fault(const char *msg, struct mm_struct *mm,
 
 109                              unsigned long addr, unsigned int fsr,
 
 110                              struct pt_regs *regs)
 
 113         pr_alert("8<--- cut here ---\n");
 
 114         pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
 
 117         show_pte(KERN_ALERT, mm, addr);
 
 118         die("Oops", regs, fsr);
 
 124  * Oops.  The kernel tried to access some page that wasn't present.
 
 127 __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
 
 128                   struct pt_regs *regs)
 
 132          * Are we prepared to handle this kernel fault?
 
 134         if (fixup_exception(regs))
 
 138          * No handler, we'll have to terminate things with extreme prejudice.
 
 140         if (addr < PAGE_SIZE) {
 
 141                 msg = "NULL pointer dereference";
 
 143                 if (kfence_handle_page_fault(addr, is_write_fault(fsr), regs))
 
 146                 msg = "paging request";
 
 149         die_kernel_fault(msg, mm, addr, fsr, regs);
 
 153  * Something tried to access memory that isn't in our memory map..
 
 154  * User mode accesses just cause a SIGSEGV
 
 157 __do_user_fault(unsigned long addr, unsigned int fsr, unsigned int sig,
 
 158                 int code, struct pt_regs *regs)
 
 160         struct task_struct *tsk = current;
 
 162         if (addr > TASK_SIZE)
 
 163                 harden_branch_predictor();
 
 165 #ifdef CONFIG_DEBUG_USER
 
 166         if (((user_debug & UDBG_SEGV) && (sig == SIGSEGV)) ||
 
 167             ((user_debug & UDBG_BUS)  && (sig == SIGBUS))) {
 
 168                 pr_err("8<--- cut here ---\n");
 
 169                 pr_err("%s: unhandled page fault (%d) at 0x%08lx, code 0x%03x\n",
 
 170                        tsk->comm, sig, addr, fsr);
 
 171                 show_pte(KERN_ERR, tsk->mm, addr);
 
 175 #ifndef CONFIG_KUSER_HELPERS
 
 176         if ((sig == SIGSEGV) && ((addr & PAGE_MASK) == 0xffff0000))
 
 177                 printk_ratelimited(KERN_DEBUG
 
 178                                    "%s: CONFIG_KUSER_HELPERS disabled at 0x%08lx\n",
 
 182         tsk->thread.address = addr;
 
 183         tsk->thread.error_code = fsr;
 
 184         tsk->thread.trap_no = 14;
 
 185         force_sig_fault(sig, code, (void __user *)addr);
 
 188 void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 
 190         struct task_struct *tsk = current;
 
 191         struct mm_struct *mm = tsk->active_mm;
 
 194          * If we are in kernel mode at this point, we
 
 195          * have no context to handle this fault with.
 
 198                 __do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
 
 200                 __do_kernel_fault(mm, addr, fsr, regs);
 
 204 #define VM_FAULT_BADMAP         ((__force vm_fault_t)0x010000)
 
 205 #define VM_FAULT_BADACCESS      ((__force vm_fault_t)0x020000)
 
 207 static inline bool is_permission_fault(unsigned int fsr)
 
 209         int fs = fsr_fs(fsr);
 
 210 #ifdef CONFIG_ARM_LPAE
 
 211         if ((fs & FS_PERM_NOLL_MASK) == FS_PERM_NOLL)
 
 214         if (fs == FS_L1_PERM || fs == FS_L2_PERM)
 
 220 static vm_fault_t __kprobes
 
 221 __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int flags,
 
 222                 unsigned long vma_flags, struct pt_regs *regs)
 
 224         struct vm_area_struct *vma = find_vma(mm, addr);
 
 226                 return VM_FAULT_BADMAP;
 
 228         if (unlikely(vma->vm_start > addr)) {
 
 229                 if (!(vma->vm_flags & VM_GROWSDOWN))
 
 230                         return VM_FAULT_BADMAP;
 
 231                 if (addr < FIRST_USER_ADDRESS)
 
 232                         return VM_FAULT_BADMAP;
 
 233                 if (expand_stack(vma, addr))
 
 234                         return VM_FAULT_BADMAP;
 
 238          * ok, we have a good vm_area for this memory access, check the
 
 239          * permissions on the VMA allow for the fault which occurred.
 
 241         if (!(vma->vm_flags & vma_flags))
 
 242                 return VM_FAULT_BADACCESS;
 
 244         return handle_mm_fault(vma, addr & PAGE_MASK, flags, regs);
 
 248 do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 
 250         struct mm_struct *mm = current->mm;
 
 253         unsigned int flags = FAULT_FLAG_DEFAULT;
 
 254         unsigned long vm_flags = VM_ACCESS_FLAGS;
 
 256         if (kprobe_page_fault(regs, fsr))
 
 260         /* Enable interrupts if they were enabled in the parent context. */
 
 261         if (interrupts_enabled(regs))
 
 265          * If we're in an interrupt or have no user
 
 266          * context, we must not take the fault..
 
 268         if (faulthandler_disabled() || !mm)
 
 272                 flags |= FAULT_FLAG_USER;
 
 274         if (is_write_fault(fsr)) {
 
 275                 flags |= FAULT_FLAG_WRITE;
 
 279         if (fsr & FSR_LNX_PF) {
 
 282                 if (is_permission_fault(fsr) && !user_mode(regs))
 
 283                         die_kernel_fault("execution of memory",
 
 284                                          mm, addr, fsr, regs);
 
 287         perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
 
 290          * As per x86, we may deadlock here.  However, since the kernel only
 
 291          * validly references user space from well defined areas of the code,
 
 292          * we can bug out early if this is from code which shouldn't.
 
 294         if (!mmap_read_trylock(mm)) {
 
 295                 if (!user_mode(regs) && !search_exception_tables(regs->ARM_pc))
 
 301                  * The above down_read_trylock() might have succeeded in
 
 302                  * which case, we'll have missed the might_sleep() from
 
 306 #ifdef CONFIG_DEBUG_VM
 
 307                 if (!user_mode(regs) &&
 
 308                     !search_exception_tables(regs->ARM_pc))
 
 313         fault = __do_page_fault(mm, addr, flags, vm_flags, regs);
 
 315         /* If we need to retry but a fatal signal is pending, handle the
 
 316          * signal first. We do not need to release the mmap_lock because
 
 317          * it would already be released in __lock_page_or_retry in
 
 319         if (fault_signal_pending(fault, regs)) {
 
 320                 if (!user_mode(regs))
 
 325         if (!(fault & VM_FAULT_ERROR)) {
 
 326                 if (fault & VM_FAULT_RETRY) {
 
 327                         flags |= FAULT_FLAG_TRIED;
 
 332         mmap_read_unlock(mm);
 
 335          * Handle the "normal" case first - VM_FAULT_MAJOR
 
 337         if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP | VM_FAULT_BADACCESS))))
 
 341          * If we are in kernel mode at this point, we
 
 342          * have no context to handle this fault with.
 
 344         if (!user_mode(regs))
 
 347         if (fault & VM_FAULT_OOM) {
 
 349                  * We ran out of memory, call the OOM killer, and return to
 
 350                  * userspace (which will retry the fault, or kill us if we
 
 353                 pagefault_out_of_memory();
 
 357         if (fault & VM_FAULT_SIGBUS) {
 
 359                  * We had some memory, but were unable to
 
 360                  * successfully fix up this page fault.
 
 366                  * Something tried to access memory that
 
 367                  * isn't in our memory map..
 
 370                 code = fault == VM_FAULT_BADACCESS ?
 
 371                         SEGV_ACCERR : SEGV_MAPERR;
 
 374         __do_user_fault(addr, fsr, sig, code, regs);
 
 378         __do_kernel_fault(mm, addr, fsr, regs);
 
 381 #else                                   /* CONFIG_MMU */
 
 383 do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 
 387 #endif                                  /* CONFIG_MMU */
 
 390  * First Level Translation Fault Handler
 
 392  * We enter here because the first level page table doesn't contain
 
 393  * a valid entry for the address.
 
 395  * If the address is in kernel space (>= TASK_SIZE), then we are
 
 396  * probably faulting in the vmalloc() area.
 
 398  * If the init_task's first level page tables contains the relevant
 
 399  * entry, we copy the it to this task.  If not, we send the process
 
 400  * a signal, fixup the exception, or oops the kernel.
 
 402  * NOTE! We MUST NOT take any locks for this case. We may be in an
 
 403  * interrupt or a critical region, and should only copy the information
 
 404  * from the master page table, nothing more.
 
 408 do_translation_fault(unsigned long addr, unsigned int fsr,
 
 409                      struct pt_regs *regs)
 
 417         if (addr < TASK_SIZE)
 
 418                 return do_page_fault(addr, fsr, regs);
 
 423         index = pgd_index(addr);
 
 425         pgd = cpu_get_pgd() + index;
 
 426         pgd_k = init_mm.pgd + index;
 
 428         p4d = p4d_offset(pgd, addr);
 
 429         p4d_k = p4d_offset(pgd_k, addr);
 
 431         if (p4d_none(*p4d_k))
 
 433         if (!p4d_present(*p4d))
 
 434                 set_p4d(p4d, *p4d_k);
 
 436         pud = pud_offset(p4d, addr);
 
 437         pud_k = pud_offset(p4d_k, addr);
 
 439         if (pud_none(*pud_k))
 
 441         if (!pud_present(*pud))
 
 442                 set_pud(pud, *pud_k);
 
 444         pmd = pmd_offset(pud, addr);
 
 445         pmd_k = pmd_offset(pud_k, addr);
 
 447 #ifdef CONFIG_ARM_LPAE
 
 449          * Only one hardware entry per PMD with LPAE.
 
 454          * On ARM one Linux PGD entry contains two hardware entries (see page
 
 455          * tables layout in pgtable.h). We normally guarantee that we always
 
 456          * fill both L1 entries. But create_mapping() doesn't follow the rule.
 
 457          * It can create inidividual L1 entries, so here we have to call
 
 458          * pmd_none() check for the entry really corresponded to address, not
 
 459          * for the first of pair.
 
 461         index = (addr >> SECTION_SHIFT) & 1;
 
 463         if (pmd_none(pmd_k[index]))
 
 466         copy_pmd(pmd, pmd_k);
 
 470         do_bad_area(addr, fsr, regs);
 
 473 #else                                   /* CONFIG_MMU */
 
 475 do_translation_fault(unsigned long addr, unsigned int fsr,
 
 476                      struct pt_regs *regs)
 
 480 #endif                                  /* CONFIG_MMU */
 
 483  * Some section permission faults need to be handled gracefully.
 
 484  * They can happen due to a __{get,put}_user during an oops.
 
 486 #ifndef CONFIG_ARM_LPAE
 
 488 do_sect_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 
 490         do_bad_area(addr, fsr, regs);
 
 493 #endif /* CONFIG_ARM_LPAE */
 
 496  * This abort handler always returns "fault".
 
 499 do_bad(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 
 505         int     (*fn)(unsigned long addr, unsigned int fsr, struct pt_regs *regs);
 
 512 #ifdef CONFIG_ARM_LPAE
 
 513 #include "fsr-3level.c"
 
 515 #include "fsr-2level.c"
 
 519 hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *),
 
 520                 int sig, int code, const char *name)
 
 522         if (nr < 0 || nr >= ARRAY_SIZE(fsr_info))
 
 525         fsr_info[nr].fn   = fn;
 
 526         fsr_info[nr].sig  = sig;
 
 527         fsr_info[nr].code = code;
 
 528         fsr_info[nr].name = name;
 
 532  * Dispatch a data abort to the relevant handler.
 
 535 do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 
 537         const struct fsr_info *inf = fsr_info + fsr_fs(fsr);
 
 539         if (!inf->fn(addr, fsr & ~FSR_LNX_PF, regs))
 
 542         pr_alert("8<--- cut here ---\n");
 
 543         pr_alert("Unhandled fault: %s (0x%03x) at 0x%08lx\n",
 
 544                 inf->name, fsr, addr);
 
 545         show_pte(KERN_ALERT, current->mm, addr);
 
 547         arm_notify_die("", regs, inf->sig, inf->code, (void __user *)addr,
 
 552 hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *),
 
 553                  int sig, int code, const char *name)
 
 555         if (nr < 0 || nr >= ARRAY_SIZE(ifsr_info))
 
 558         ifsr_info[nr].fn   = fn;
 
 559         ifsr_info[nr].sig  = sig;
 
 560         ifsr_info[nr].code = code;
 
 561         ifsr_info[nr].name = name;
 
 565 do_PrefetchAbort(unsigned long addr, unsigned int ifsr, struct pt_regs *regs)
 
 567         const struct fsr_info *inf = ifsr_info + fsr_fs(ifsr);
 
 569         if (!inf->fn(addr, ifsr | FSR_LNX_PF, regs))
 
 572         pr_alert("Unhandled prefetch abort: %s (0x%03x) at 0x%08lx\n",
 
 573                 inf->name, ifsr, addr);
 
 575         arm_notify_die("", regs, inf->sig, inf->code, (void __user *)addr,
 
 580  * Abort handler to be used only during first unmasking of asynchronous aborts
 
 581  * on the boot CPU. This makes sure that the machine will not die if the
 
 582  * firmware/bootloader left an imprecise abort pending for us to trip over.
 
 584 static int __init early_abort_handler(unsigned long addr, unsigned int fsr,
 
 585                                       struct pt_regs *regs)
 
 587         pr_warn("Hit pending asynchronous external abort (FSR=0x%08x) during "
 
 588                 "first unmask, this is most likely caused by a "
 
 589                 "firmware/bootloader bug.\n", fsr);
 
 594 void __init early_abt_enable(void)
 
 596         fsr_info[FSR_FS_AEA].fn = early_abort_handler;
 
 598         fsr_info[FSR_FS_AEA].fn = do_bad;
 
 601 #ifndef CONFIG_ARM_LPAE
 
 602 static int __init exceptions_init(void)
 
 604         if (cpu_architecture() >= CPU_ARCH_ARMv6) {
 
 605                 hook_fault_code(4, do_translation_fault, SIGSEGV, SEGV_MAPERR,
 
 606                                 "I-cache maintenance fault");
 
 609         if (cpu_architecture() >= CPU_ARCH_ARMv7) {
 
 611                  * TODO: Access flag faults introduced in ARMv6K.
 
 612                  * Runtime check for 'K' extension is needed
 
 614                 hook_fault_code(3, do_bad, SIGSEGV, SEGV_MAPERR,
 
 615                                 "section access flag fault");
 
 616                 hook_fault_code(6, do_bad, SIGSEGV, SEGV_MAPERR,
 
 617                                 "section access flag fault");
 
 623 arch_initcall(exceptions_init);