Messages in this thread Patch in this message | | | From | Vincenzo Frascino <> | Subject | [PATCH v4 3/5] kasan: Add report for async mode | Date | Mon, 18 Jan 2021 18:30:31 +0000 |
| |
KASAN provides an asynchronous mode of execution.
Add reporting functionality for this mode.
Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Alexander Potapenko <glider@google.com> Cc: Andrey Konovalov <andreyknvl@google.com> Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com> --- include/linux/kasan.h | 3 +++ mm/kasan/report.c | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/include/linux/kasan.h b/include/linux/kasan.h index fe1ae73ff8b5..8f43836ccdac 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -336,6 +336,9 @@ static inline void *kasan_reset_tag(const void *addr) bool kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip); +bool kasan_report_async(unsigned long addr, size_t size, + bool is_write, unsigned long ip); + #else /* CONFIG_KASAN_SW_TAGS || CONFIG_KASAN_HW_TAGS */ static inline void *kasan_reset_tag(const void *addr) diff --git a/mm/kasan/report.c b/mm/kasan/report.c index c0fb21797550..946016ead6a9 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -388,11 +388,11 @@ static void __kasan_report(unsigned long addr, size_t size, bool is_write, start_report(&flags); print_error_description(&info); - if (addr_has_metadata(untagged_addr)) + if (addr_has_metadata(untagged_addr) && (untagged_addr != 0)) print_tags(get_tag(tagged_addr), info.first_bad_addr); pr_err("\n"); - if (addr_has_metadata(untagged_addr)) { + if (addr_has_metadata(untagged_addr) && (untagged_addr != 0)) { print_address_description(untagged_addr, get_tag(tagged_addr)); pr_err("\n"); print_memory_metadata(info.first_bad_addr); @@ -419,6 +419,18 @@ bool kasan_report(unsigned long addr, size_t size, bool is_write, return ret; } +bool kasan_report_async(unsigned long addr, size_t size, + bool is_write, unsigned long ip) +{ + pr_info("==================================================================\n"); + pr_info("KASAN: set in asynchronous mode\n"); + pr_info("KASAN: some information might not be accurate\n"); + pr_info("KASAN: fault address is ignored\n"); + pr_info("KASAN: write/read distinction is ignored\n"); + + return kasan_report(addr, size, is_write, ip); +} + #ifdef CONFIG_KASAN_INLINE /* * With CONFIG_KASAN_INLINE, accesses to bogus pointers (outside the high -- 2.30.0
| |