lkml.org 
[lkml]   [2020]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v7 04/41] arm64: kasan: Add arch layer for memory tagging helpers
    From
    This patch add a set of arch_*() memory tagging helpers currently only
    defined for arm64 when hardware tag-based KASAN is enabled. These helpers
    will be used by KASAN runtime to implement the hardware tag-based mode.

    The arch-level indirection level is introduced to simplify adding hardware
    tag-based KASAN support for other architectures in the future by defining
    the appropriate arch_*() macros.

    Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
    Co-developed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    ---
    Change-Id: I42b0795a28067872f8308e00c6f0195bca435c2a
    ---
    arch/arm64/include/asm/memory.h | 8 ++++++++
    mm/kasan/kasan.h | 22 ++++++++++++++++++++++
    2 files changed, 30 insertions(+)

    diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
    index cd61239bae8c..580d6ef17079 100644
    --- a/arch/arm64/include/asm/memory.h
    +++ b/arch/arm64/include/asm/memory.h
    @@ -230,6 +230,14 @@ static inline const void *__tag_set(const void *addr, u8 tag)
    return (const void *)(__addr | __tag_shifted(tag));
    }

    +#ifdef CONFIG_KASAN_HW_TAGS
    +#define arch_init_tags(max_tag) mte_init_tags(max_tag)
    +#define arch_get_random_tag() mte_get_random_tag()
    +#define arch_get_mem_tag(addr) mte_get_mem_tag(addr)
    +#define arch_set_mem_tag_range(addr, size, tag) \
    + mte_set_mem_tag_range((addr), (size), (tag))
    +#endif /* CONFIG_KASAN_HW_TAGS */
    +
    /*
    * Physical vs virtual RAM address space conversion. These are
    * private definitions which should NOT be used outside memory.h
    diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h
    index ac499456740f..a4db457a9023 100644
    --- a/mm/kasan/kasan.h
    +++ b/mm/kasan/kasan.h
    @@ -224,6 +224,28 @@ static inline const void *arch_kasan_set_tag(const void *addr, u8 tag)
    #define reset_tag(addr) ((void *)arch_kasan_reset_tag(addr))
    #define get_tag(addr) arch_kasan_get_tag(addr)

    +#ifdef CONFIG_KASAN_HW_TAGS
    +
    +#ifndef arch_init_tags
    +#define arch_init_tags(max_tag)
    +#endif
    +#ifndef arch_get_random_tag
    +#define arch_get_random_tag() (0xFF)
    +#endif
    +#ifndef arch_get_mem_tag
    +#define arch_get_mem_tag(addr) (0xFF)
    +#endif
    +#ifndef arch_set_mem_tag_range
    +#define arch_set_mem_tag_range(addr, size, tag) ((void *)(addr))
    +#endif
    +
    +#define hw_init_tags(max_tag) arch_init_tags(max_tag)
    +#define hw_get_random_tag() arch_get_random_tag()
    +#define hw_get_mem_tag(addr) arch_get_mem_tag(addr)
    +#define hw_set_mem_tag_range(addr, size, tag) arch_set_mem_tag_range((addr), (size), (tag))
    +
    +#endif /* CONFIG_KASAN_HW_TAGS */
    +
    /*
    * Exported functions for interfaces called from assembly or from generated
    * code. Declarations here to avoid warning about missing declarations.
    --
    2.29.1.341.ge80a0c044ae-goog
    \
     
     \ /
      Last update: 2020-11-02 17:07    [W:2.118 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site