lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH mm v3 20/38] kasan: add wrappers for vmalloc hooks
    Date
    From: Andrey Konovalov <andreyknvl@google.com>

    Add wrappers around functions that [un]poison memory for vmalloc
    allocations. These functions will be used by HW_TAGS KASAN and
    therefore need to be disabled when kasan=off command line argument
    is provided.

    This patch does no functional changes for software KASAN modes.

    Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
    ---
    include/linux/kasan.h | 17 +++++++++++++++--
    mm/kasan/shadow.c | 5 ++---
    2 files changed, 17 insertions(+), 5 deletions(-)

    diff --git a/include/linux/kasan.h b/include/linux/kasan.h
    index 46a63374c86f..da320069e7cf 100644
    --- a/include/linux/kasan.h
    +++ b/include/linux/kasan.h
    @@ -424,8 +424,21 @@ void kasan_release_vmalloc(unsigned long start, unsigned long end,
    unsigned long free_region_start,
    unsigned long free_region_end);

    -void kasan_unpoison_vmalloc(const void *start, unsigned long size);
    -void kasan_poison_vmalloc(const void *start, unsigned long size);
    +void __kasan_unpoison_vmalloc(const void *start, unsigned long size);
    +static __always_inline void kasan_unpoison_vmalloc(const void *start,
    + unsigned long size)
    +{
    + if (kasan_enabled())
    + __kasan_unpoison_vmalloc(start, size);
    +}
    +
    +void __kasan_poison_vmalloc(const void *start, unsigned long size);
    +static __always_inline void kasan_poison_vmalloc(const void *start,
    + unsigned long size)
    +{
    + if (kasan_enabled())
    + __kasan_poison_vmalloc(start, size);
    +}

    #else /* CONFIG_KASAN_VMALLOC */

    diff --git a/mm/kasan/shadow.c b/mm/kasan/shadow.c
    index bf7ab62fbfb9..39d0b32ebf70 100644
    --- a/mm/kasan/shadow.c
    +++ b/mm/kasan/shadow.c
    @@ -475,8 +475,7 @@ void kasan_release_vmalloc(unsigned long start, unsigned long end,
    }
    }

    -
    -void kasan_unpoison_vmalloc(const void *start, unsigned long size)
    +void __kasan_unpoison_vmalloc(const void *start, unsigned long size)
    {
    if (!is_vmalloc_or_module_addr(start))
    return;
    @@ -488,7 +487,7 @@ void kasan_unpoison_vmalloc(const void *start, unsigned long size)
    * Poison the shadow for a vmalloc region. Called as part of the
    * freeing process at the time the region is freed.
    */
    -void kasan_poison_vmalloc(const void *start, unsigned long size)
    +void __kasan_poison_vmalloc(const void *start, unsigned long size)
    {
    if (!is_vmalloc_or_module_addr(start))
    return;
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-12-13 22:54    [W:4.195 / U:0.448 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site