Subject: [PATCH 3/4] arm64: mte: Disregard the zero page explicitly for manipulating tags

From: Ard Biesheuvel <[email-masked]>
Date: Wed, 3 Jun 2026 18:09:53 +0200

From: Ard Biesheuvel <[email-masked]>

The zero page is conceptually immutable, and will be moved into .rodata
to prevent inadvertent corruption.

Prepare the MTE code for this, by ensuring that the zero page is never
taken into account for tag manipulation, given that those actions will
no longer be permitted on the read-only alias of .rodata in the linear
map.

Signed-off-by: Ard Biesheuvel <[email-masked]>
---
 arch/arm64/include/asm/mte.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/include/asm/mte.h b/arch/arm64/include/asm/mte.h
index 7f7b97e09996..093b34944aee 100644
--- a/arch/arm64/include/asm/mte.h
+++ b/arch/arm64/include/asm/mte.h
@@ -80,6 +80,11 @@ static inline bool page_mte_tagged(struct page *page)
  */
 static inline bool try_page_mte_tagging(struct page *page)
 {
+	extern struct page *__zero_page;
+
+	if (page == __zero_page)
+		return false;
+
 	VM_WARN_ON_ONCE(folio_test_hugetlb(page_folio(page)));
 
 	if (!test_and_set_bit(PG_mte_lock, &page->flags.f))
-- 
2.54.0.1013.g208068f2d8-goog