Skip to main content
Arm MTE in Practice

Arm MTE in Practice

743 words·4 mins
Memory Safety - This article is part of a series.
Part 4: This Article

How MTE Works
#

Arm’s Memory Tagging Extension (MTE), introduced in ARMv9, is the most widely deployed hardware memory safety technology as of 2025. It provides probabilistic protection against spatial and temporal memory safety violations at low runtime cost.

Why this matters for AGIACC: MTE proves the market wants hardware help for memory safety. It also highlights the gap between broad consumer hardening and the deterministic guarantees high-assurance AI systems still need.

The Tagging Model
#

MTE operates on two types of tags:

  1. Memory tags — A 4-bit tag stored alongside every aligned 16-byte granule of physical memory. These tags are maintained in a separate tag storage area.
  2. Pointer tags — A 4-bit tag embedded in the unused upper bits of every pointer (bits [59:56] in the AArch64 address space).

On every memory access, the CPU compares the pointer tag with the memory tag of the target granule:

Pointer:  0x 0A 00007FFF00001234
              ^^-- pointer tag = 0xA

Memory granule at 0x00007FFF00001230:
  tag = 0xA  →  Match ✓  →  Access proceeds

Memory granule at 0x00007FFF00001230:
  tag = 0x3  →  Mismatch ✗  →  Fault / async report

Tag Assignment
#

  • Allocation: When malloc() allocates memory, the allocator assigns a random tag to both the pointer and the underlying memory granules (via IRG — Insert Random Tag — and STG — Store Tag — instructions).
  • Deallocation: When free() releases memory, the allocator re-tags the freed granules with a different random tag. Any dangling pointer now carries a stale tag → mismatch on reuse.

Modes of Operation
#

ModeBehaviourUse Case
SynchronousImmediate exception on mismatchDebugging, security-critical paths
AsymmetricSync for reads, async for writesBalanced production deployment
AsynchronousLogs mismatches in a register, checked periodicallyLow-overhead production monitoring

Real-World Deployments
#

Google Pixel (Android)
#

Google has been the leading adopter of MTE in mobile devices:

  • Pixel 8 (2023): First consumer device with MTE enabled in production. User-facing option to enable MTE for system processes.
  • Pixel 9 (2024): MTE enabled by default for a wider set of system services and native processes.
  • Google reports MTE has caught real-world vulnerabilities in production that escaped testing — serving as both a detection and a mitigation layer.

Apple iPhone 17 (2025)
#

Apple introduced Memory Integrity Enforcement (MIE), built on Enhanced MTE (EMTE):

  • MIE is always-on, covering the entire application address space.
  • Apple’s implementation extends MTE with additional proprietary hardening.
  • Bruce Schneier described MIE as “the most significant cybersecurity advance in a decade.”

Server / Cloud
#

  • AmpereOne ARM server processors support MTE, enabling cloud providers to deploy tagged memory for container and VM workloads.
  • Google is exploring MTE in Chrome OS and Android kernel hardening.

Strengths
#

  • Low overhead: ~3–5% performance impact in synchronous mode; near-zero in asynchronous mode.
  • Always-on deployment: Suitable for production, not just testing.
  • Breaks exploit chains: Randomised tags disrupt heap spraying, use-after-free exploitation, and linear overflow attacks.
  • OS/allocator integration: Works transparently with standard malloc / free when the allocator is MTE-aware.

Limitations
#

Probabilistic, Not Deterministic
#

With 4-bit tags (16 possible values, minus the current tag), the probability of an attacker guessing the correct tag on a single attempt is 1/15 ≈ 6.7%. Over multiple attempts (e.g., brute-forcing heap layout), the probability of bypass increases.

Tag Leakage
#

MTE tags are secrets. If an attacker can leak a tag value — via a format string vulnerability, a side channel, or an information disclosure bug — the defense is completely bypassed for that allocation. CVE-2025-0072 demonstrated that Mali GPU driver bugs could leak MTE tags, enabling targeted bypass on Pixel devices.

Granularity
#

MTE operates at 16-byte granularity. Overflows smaller than 16 bytes within the same granule are undetected. Adjacent fields within a struct may share a granule, allowing intra-object overwrites.

No Compartmentalization
#

MTE protects individual memory accesses but provides no isolation between software components. A compromised module can still access any memory whose tag it knows.


MTE vs. CHERI
#

PropertyMTECHERI
Detection modelProbabilistic (4 bits)Deterministic (unforgeable)
Bounds granularity16 bytesByte-precise
Bypass resistanceVulnerable to tag leaksSecret-free — no tags to leak
CompartmentalizationNoneFine-grained capability domains
Deployment statusShipping in mass-market devicesResearch / pre-commercial
Overhead~3–5%~2–5%
Best forMass-market consumer hardeningSafety/security-critical infrastructure

MTE is excellent for raising the cost of exploitation across billions of consumer devices. CHERI is the right choice when deterministic guarantees are required — as in autonomous vehicles, industrial control, and AI infrastructure.


Next: CHERI Deep Dive →

Memory Safety - This article is part of a series.
Part 4: This Article