arm64: mte: DC {GVA,GZVA} shouldn't be used when DCZID_EL0.DZP == 1
authorReiji Watanabe <reijiw@google.com>
Mon, 6 Dec 2021 00:47:36 +0000 (16:47 -0800)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 6 Dec 2021 17:02:10 +0000 (17:02 +0000)
commit685e2564daa1493053fcd7f1dbed38b35ee2f3cb
treef7409f8ee9f4ac811079d1f671cce80cf530d0e8
parentf0616abd4e67143b45b04b565839148458857347
arm64: mte: DC {GVA,GZVA} shouldn't be used when DCZID_EL0.DZP == 1

Currently, mte_set_mem_tag_range() and mte_zero_clear_page_tags() use
DC {GVA,GZVA} unconditionally.  But, they should make sure that
DCZID_EL0.DZP, which indicates whether or not use of those instructions
is prohibited, is zero when using those instructions.
Use ST{G,ZG,Z2G} instead when DCZID_EL0.DZP == 1.

Fixes: 013bb59dbb7c ("arm64: mte: handle tags zeroing at page allocation time")
Fixes: 3d0cca0b02ac ("kasan: speed up mte_set_mem_tag_range")
Signed-off-by: Reiji Watanabe <reijiw@google.com>
Link: https://lore.kernel.org/r/20211206004736.1520989-3-reijiw@google.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/mte-kasan.h
arch/arm64/lib/mte.S