.. | .. |
---|
299 | 299 | show_pte(addr); |
---|
300 | 300 | die("Oops", regs, esr); |
---|
301 | 301 | bust_spinlocks(0); |
---|
302 | | - do_exit(SIGKILL); |
---|
| 302 | + make_task_dead(SIGKILL); |
---|
303 | 303 | } |
---|
304 | 304 | |
---|
305 | 305 | #ifdef CONFIG_KASAN_HW_TAGS |
---|
.. | .. |
---|
361 | 361 | return false; |
---|
362 | 362 | } |
---|
363 | 363 | |
---|
| 364 | +static bool is_translation_fault(unsigned long esr) |
---|
| 365 | +{ |
---|
| 366 | + return (esr & ESR_ELx_FSC_TYPE) == ESR_ELx_FSC_FAULT; |
---|
| 367 | +} |
---|
| 368 | + |
---|
364 | 369 | static void __do_kernel_fault(unsigned long addr, unsigned int esr, |
---|
365 | 370 | struct pt_regs *regs) |
---|
366 | 371 | { |
---|
.. | .. |
---|
393 | 398 | } else if (addr < PAGE_SIZE) { |
---|
394 | 399 | msg = "NULL pointer dereference"; |
---|
395 | 400 | } else { |
---|
396 | | - if (kfence_handle_page_fault(addr, esr & ESR_ELx_WNR, regs)) |
---|
| 401 | + if (is_translation_fault(esr) && |
---|
| 402 | + kfence_handle_page_fault(addr, esr & ESR_ELx_WNR, regs)) |
---|
397 | 403 | return; |
---|
398 | 404 | |
---|
399 | 405 | msg = "paging request"; |
---|
.. | .. |
---|
478 | 484 | } |
---|
479 | 485 | } |
---|
480 | 486 | |
---|
481 | | -#define VM_FAULT_BADMAP 0x010000 |
---|
482 | | -#define VM_FAULT_BADACCESS 0x020000 |
---|
| 487 | +#define VM_FAULT_BADMAP ((__force vm_fault_t)0x010000) |
---|
| 488 | +#define VM_FAULT_BADACCESS ((__force vm_fault_t)0x020000) |
---|
483 | 489 | |
---|
484 | 490 | static int __do_page_fault(struct vm_area_struct *vma, unsigned long addr, |
---|
485 | 491 | unsigned int mm_flags, unsigned long vm_flags, |
---|