CVE-2022-50675

arm64: mte: Avoid setting PG_mte_tagged if no tags cleared or restored

published December 9, 2025

CVSS
—
EPSS
0%
Percentile
14.5
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

arm64: mte: Avoid setting PG_mte_tagged if no tags cleared or restored

Prior to commit 69e3b846d8a7 ("arm64: mte: Sync tags for pages where PTE

is untagged"), mte_sync_tags() was only called for pte_tagged() entries

(those mapped with PROT_MTE). Therefore mte_sync_tags() could safely use

test_and_set_bit(PG_mte_tagged, &page->flags) without inadvertently

setting PG_mte_tagged on an untagged page.

The above commit was required as guests may enable MTE without any

control at the stage 2 mapping, nor a PROT_MTE mapping in the VMM.

However, the side-effect was that any page with a PTE that looked like

swap (or migration) was getting PG_mte_tagged set automatically. A

subsequent page copy (e.g. migration) copied the tags to the destination

page even if the tags were owned by KASAN.

This issue was masked by the page_kasan_tag_reset() call introduced in

commit e5b8d9218951 ("arm64: mte: reset the page tag in page->flags").

When this commit was reverted (20794545c146), KASAN started reporting

access faults because the overriding tags in a page did not match the

original page->flags (with CONFIG_KASAN_HW_TAGS=y):

BUG: KASAN: invalid-access in copy_page+0x10/0xd0 arch/arm64/lib/copy_page.S:26

Read at addr f5ff000017f2e000 by task syz-executor.1/2218

Pointer tag: [f5], memory tag: [f2]

Move the PG_mte_tagged bit setting from mte_sync_tags() to the actual

place where tags are cleared (mte_sync_page_tags()) or restored

(mte_restore_tags()).

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00242 · 14.5th percentile
Published
2025-12-09T01:29Z
EPSS history
Timeline
  • 09 DEC 01:29Z
    arm64: mte: Avoid setting PG_mte_tagged if no tags cleared or restored
    cvelistv5