lkml.org 
[lkml]   [2021]   [Jan]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v4 3/5] kasan: Add report for async mode
    On Mon, Jan 18, 2021 at 06:30:31PM +0000, Vincenzo Frascino wrote:
    > 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);

    We have no address, no size and no is_write information. Do we have a
    reason to pass all these arguments here? Not sure what SPARC ADI does
    but they may not have all this information either. We can pass ip as the
    point where we checked the TFSR reg but that's about it.

    > +
    > #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);

    So just call kasan_report (0, 0, 0, ip) here.

    --
    Catalin

    \
     
     \ /
      Last update: 2021-01-19 14:24    [W:4.141 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site