The Memory Tagging Extension (MTE) is a feature of the ARM v8.5 architecture that introduces several hardware capabilities:
- Each aligned 16-byte region of application memory can be assigned a 4-bit memory tag.
- Every pointer can include a 4-bit address tag in its most significant byte.
- An exception is triggered if the address tag differs from the memory tag.
- A set of special instructions is provided for efficient tag manipulation.
MTE aims to tackle two major issues: buffer overflows and use-after-free errors. It is the responsibility of tools such as compilers, libraries, and assemblers to emit MTE instructions that instrument the code to prevent these errors.
This talk outlines the current support (and work in progress) for MTE instructions in the latest GNU tools, including GCC, binutils, and glibc.