The patch titled Subject: kasan, arm64: print report from tag fault handler has been added to the -mm tree. Its filename is kasan-arm64-print-report-from-tag-fault-handler.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/kasan-arm64-print-report-from-tag-fault-handler.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/kasan-arm64-print-report-from-tag-fault-handler.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Andrey Konovalov <andreyknvl@xxxxxxxxxx> Subject: kasan, arm64: print report from tag fault handler Add error reporting for hardware tag-based KASAN. When CONFIG_KASAN_HW_TAGS is enabled, print KASAN report from the arm64 tag fault handler. SAS bits aren't set in ESR for all faults reported in EL1, so it's impossible to find out the size of the access the caused the fault. Adapt KASAN reporting code to handle this case. Link: https://lkml.kernel.org/r/fe78d723ba64456d68754a944fa93fe4a25c730f.1605046192.git.andreyknvl@xxxxxxxxxx Signed-off-by: Andrey Konovalov <andreyknvl@xxxxxxxxxx> Co-developed-by: Vincenzo Frascino <vincenzo.frascino@xxxxxxx> Signed-off-by: Vincenzo Frascino <vincenzo.frascino@xxxxxxx> Reviewed-by: Catalin Marinas <catalin.marinas@xxxxxxx> Cc: Alexander Potapenko <glider@xxxxxxxxxx> Cc: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> Cc: Branislav Rankov <Branislav.Rankov@xxxxxxx> Cc: Dmitry Vyukov <dvyukov@xxxxxxxxxx> Cc: Evgenii Stepanov <eugenis@xxxxxxxxxx> Cc: Kevin Brodsky <kevin.brodsky@xxxxxxx> Cc: Marco Elver <elver@xxxxxxxxxx> Cc: Vasily Gorbik <gor@xxxxxxxxxxxxx> Cc: Will Deacon <will.deacon@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/arm64/mm/fault.c | 14 ++++++++++++++ mm/kasan/report.c | 11 ++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) --- a/arch/arm64/mm/fault.c~kasan-arm64-print-report-from-tag-fault-handler +++ a/arch/arm64/mm/fault.c @@ -15,6 +15,7 @@ #include <linux/mm.h> #include <linux/hardirq.h> #include <linux/init.h> +#include <linux/kasan.h> #include <linux/kprobes.h> #include <linux/uaccess.h> #include <linux/page-flags.h> @@ -298,10 +299,23 @@ static void die_kernel_fault(const char do_exit(SIGKILL); } +#ifdef CONFIG_KASAN_HW_TAGS static void report_tag_fault(unsigned long addr, unsigned int esr, struct pt_regs *regs) { + bool is_write = ((esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT) != 0; + + /* + * SAS bits aren't set for all faults reported in EL1, so we can't + * find out access size. + */ + kasan_report(addr, 0, is_write, regs->pc); } +#else +/* Tag faults aren't enabled without CONFIG_KASAN_HW_TAGS. */ +static inline void report_tag_fault(unsigned long addr, unsigned int esr, + struct pt_regs *regs) { } +#endif static void do_tag_recovery(unsigned long addr, unsigned int esr, struct pt_regs *regs) --- a/mm/kasan/report.c~kasan-arm64-print-report-from-tag-fault-handler +++ a/mm/kasan/report.c @@ -62,9 +62,14 @@ static void print_error_description(stru { pr_err("BUG: KASAN: %s in %pS\n", get_bug_type(info), (void *)info->ip); - pr_err("%s of size %zu at addr %px by task %s/%d\n", - info->is_write ? "Write" : "Read", info->access_size, - info->access_addr, current->comm, task_pid_nr(current)); + if (info->access_size) + pr_err("%s of size %zu at addr %px by task %s/%d\n", + info->is_write ? "Write" : "Read", info->access_size, + info->access_addr, current->comm, task_pid_nr(current)); + else + pr_err("%s at addr %px by task %s/%d\n", + info->is_write ? "Write" : "Read", + info->access_addr, current->comm, task_pid_nr(current)); } static DEFINE_SPINLOCK(report_lock); _ Patches currently in -mm which might be from andreyknvl@xxxxxxxxxx are kasan-drop-unnecessary-gpl-text-from-comment-headers.patch kasan-kasan_vmalloc-depends-on-kasan_generic.patch kasan-group-vmalloc-code.patch s390-kasan-include-asm-pageh-from-asm-kasanh.patch kasan-shadow-declarations-only-for-software-modes.patch kasan-rename-unpoison_shadow-to-unpoison_memory.patch kasan-rename-kasan_shadow_-to-kasan_granule_.patch kasan-only-build-initc-for-software-modes.patch kasan-split-out-shadowc-from-commonc.patch kasan-define-kasan_granule_page.patch kasan-rename-report-and-tags-files.patch kasan-dont-duplicate-config-dependencies.patch kasan-hide-invalid-free-check-implementation.patch kasan-decode-stack-frame-only-with-kasan_stack_enable.patch kasan-arm64-only-init-shadow-for-software-modes.patch kasan-arm64-only-use-kasan_depth-for-software-modes.patch kasan-arm64-move-initialization-message.patch kasan-arm64-rename-kasan_init_tags-and-mark-as-__init.patch kasan-rename-addr_has_shadow-to-addr_has_metadata.patch kasan-rename-print_shadow_for_address-to-print_memory_metadata.patch kasan-kasan_non_canonical_hook-only-for-software-modes.patch kasan-rename-shadow-layout-macros-to-meta.patch kasan-separate-metadata_fetch_row-for-each-mode.patch kasan-arm64-dont-allow-sw_tags-with-arm64_mte.patch kasan-introduce-config_kasan_hw_tags.patch arm64-kasan-align-allocations-for-hw_tags.patch arm64-kasan-add-arch-layer-for-memory-tagging-helpers.patch kasan-define-kasan_granule_size-for-hw_tags.patch kasan-x86-s390-update-undef-config_kasan.patch kasan-arm64-expand-config_kasan-checks.patch kasan-arm64-implement-hw_tags-runtime.patch kasan-arm64-print-report-from-tag-fault-handler.patch kasan-mm-reset-tags-when-accessing-metadata.patch kasan-arm64-enable-config_kasan_hw_tags.patch kasan-add-documentation-for-hardware-tag-based-mode.patch