linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Andrey Konovalov <andreyknvl@google.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>,
	kasan-dev@googlegroups.com,  Dmitry Vyukov <dvyukov@google.com>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	 Alexander Potapenko <glider@google.com>,
	Marco Elver <elver@google.com>,
	 Evgenii Stepanov <eugenis@google.com>,
	Elena Petrova <lenaptr@google.com>,
	 Branislav Rankov <Branislav.Rankov@arm.com>,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	linux-arm-kernel@lists.infradead.org,  linux-mm@kvack.org,
	linux-kernel@vger.kernel.org,
	 Andrey Konovalov <andreyknvl@google.com>
Subject: [PATCH v6 04/40] arm64: kasan: Add arch layer for memory tagging helpers
Date: Thu, 29 Oct 2020 20:25:25 +0100	[thread overview]
Message-ID: <cc9e445314fc99b1aeee347c6a9b99f0a6e37d23.1603999489.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1603999489.git.andreyknvl@google.com>

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                | 18 ++++++++++++++++++
 2 files changed, 26 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..633f8902e5e2 100644
--- a/mm/kasan/kasan.h
+++ b/mm/kasan/kasan.h
@@ -224,6 +224,24 @@ 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)
 
+#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 init_tags(max_tag)			arch_init_tags(max_tag)
+#define get_random_tag()			arch_get_random_tag()
+#define get_mem_tag(addr)			arch_get_mem_tag(addr)
+#define set_mem_tag_range(addr, size, tag)	arch_set_mem_tag_range((addr), (size), (tag))
+
 /*
  * 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



  parent reply	other threads:[~2020-10-29 19:26 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-29 19:25 [PATCH v6 00/40] kasan: add hardware tag-based mode for arm64 Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 01/40] arm64: Enable armv8.5-a asm-arch option Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 02/40] arm64: mte: Add in-kernel MTE helpers Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 03/40] arm64: mte: Reset the page tag in page->flags Andrey Konovalov
2020-10-29 19:25 ` Andrey Konovalov [this message]
2020-10-29 19:25 ` [PATCH v6 05/40] arm64: mte: Add in-kernel tag fault handler Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 06/40] arm64: kasan: Enable in-kernel MTE Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 07/40] arm64: mte: Convert gcr_user into an exclude mask Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 08/40] arm64: mte: Switch GCR_EL1 in kernel entry and exit Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 09/40] arm64: kasan: Align allocations for HW_TAGS Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 10/40] kasan: drop unnecessary GPL text from comment headers Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 11/40] kasan: KASAN_VMALLOC depends on KASAN_GENERIC Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 12/40] kasan: group vmalloc code Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 13/40] kasan: shadow declarations only for software modes Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 14/40] kasan: rename (un)poison_shadow to (un)poison_memory Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 15/40] kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 16/40] kasan: only build init.c for software modes Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 17/40] kasan: split out shadow.c from common.c Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 18/40] kasan: define KASAN_GRANULE_PAGE Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 19/40] kasan: rename report and tags files Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 20/40] kasan: don't duplicate config dependencies Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 21/40] kasan: hide invalid free check implementation Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 22/40] kasan: decode stack frame only with KASAN_STACK_ENABLE Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 23/40] kasan, arm64: only init shadow for software modes Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 24/40] kasan, arm64: only use kasan_depth " Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 25/40] kasan: rename addr_has_shadow to addr_has_metadata Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 26/40] kasan: rename print_shadow_for_address to print_memory_metadata Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 27/40] kasan: kasan_non_canonical_hook only for software modes Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 28/40] kasan: rename SHADOW layout macros to META Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 29/40] kasan: separate metadata_fetch_row for each mode Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 30/40] kasan, arm64: don't allow SW_TAGS with ARM64_MTE Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 31/40] kasan: introduce CONFIG_KASAN_HW_TAGS Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 32/40] kasan: define KASAN_GRANULE_SIZE for HW_TAGS Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 33/40] kasan, x86, s390: update undef CONFIG_KASAN Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 34/40] kasan, arm64: expand CONFIG_KASAN checks Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 35/40] kasan, arm64: implement HW_TAGS runtime Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 36/40] kasan, arm64: print report from tag fault handler Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 37/40] kasan, mm: reset tags when accessing metadata Andrey Konovalov
2020-10-29 19:25 ` [PATCH v6 38/40] kasan, arm64: enable CONFIG_KASAN_HW_TAGS Andrey Konovalov
2020-10-29 19:26 ` [PATCH v6 39/40] kasan: add documentation for hardware tag-based mode Andrey Konovalov
2020-10-29 19:26 ` [PATCH v6 40/40] kselftest/arm64: Check GCR_EL1 after context switch Andrey Konovalov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cc9e445314fc99b1aeee347c6a9b99f0a6e37d23.1603999489.git.andreyknvl@google.com \
    --to=andreyknvl@google.com \
    --cc=Branislav.Rankov@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=aryabinin@virtuozzo.com \
    --cc=catalin.marinas@arm.com \
    --cc=dvyukov@google.com \
    --cc=elver@google.com \
    --cc=eugenis@google.com \
    --cc=glider@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=kevin.brodsky@arm.com \
    --cc=lenaptr@google.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=vincenzo.frascino@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox