diff options
author | Will Deacon <will@kernel.org> | 2021-06-24 16:05:25 +0300 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2021-06-24 16:05:25 +0300 |
commit | fdceddb06a5ff5ad3894cf9e8124d5af38ac5793 (patch) | |
tree | 1c0e225ad623ec5d6d02c42f400b2202f4567dc0 /arch/arm64/lib | |
parent | 81ad4bb1fe91d28d793d801e462a284c7f82cc40 (diff) | |
parent | c275c5c6d50a0518cdb0584e85905d10e7cefc6e (diff) | |
download | linux-fdceddb06a5ff5ad3894cf9e8124d5af38ac5793.tar.xz |
Merge branch 'for-next/mte' into for-next/core
KASAN optimisations for the hardware tagging (MTE) implementation.
* for-next/mte:
kasan: disable freed user page poisoning with HW tags
arm64: mte: handle tags zeroing at page allocation time
kasan: use separate (un)poison implementation for integrated init
mm: arch: remove indirection level in alloc_zeroed_user_highpage_movable()
kasan: speed up mte_set_mem_tag_range
Diffstat (limited to 'arch/arm64/lib')
-rw-r--r-- | arch/arm64/lib/mte.S | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/arm64/lib/mte.S b/arch/arm64/lib/mte.S index 351537c12f36..e83643b3995f 100644 --- a/arch/arm64/lib/mte.S +++ b/arch/arm64/lib/mte.S @@ -37,6 +37,26 @@ SYM_FUNC_START(mte_clear_page_tags) SYM_FUNC_END(mte_clear_page_tags) /* + * Zero the page and tags at the same time + * + * Parameters: + * x0 - address to the beginning of the page + */ +SYM_FUNC_START(mte_zero_clear_page_tags) + mrs x1, dczid_el0 + and w1, w1, #0xf + mov x2, #4 + lsl x1, x2, x1 + and x0, x0, #(1 << MTE_TAG_SHIFT) - 1 // clear the tag + +1: dc gzva, x0 + add x0, x0, x1 + tst x0, #(PAGE_SIZE - 1) + b.ne 1b + ret +SYM_FUNC_END(mte_zero_clear_page_tags) + +/* * Copy the tags from the source page to the destination one * x0 - address of the destination page * x1 - address of the source page |