Modern systems software is composed of interacting components that share a single address space for performance and engineering convenience. In this setting, a single memory error in one component can compromise the entire software stack, making fine-...
Modern systems software is composed of interacting components that share a single address space for performance and engineering convenience. In this setting, a single memory error in one component can compromise the entire software stack, making fine-grained memory protection between components essential. However, purely software-based solutions often incur prohibitive overhead, whereas specialized hardware can provide strong protection efficiently but is difficult to deploy widely.
This dissertation takes an intermediate approach and uses ARM’s Memory Tagging Extension (MTE)—a hardware feature already available on commodity processors—as a building block for memory protection. MTE provides simple, low-overhead tagging by associating 4-bit tags with pointers and aligned 16-byte memory blocks and checking for tag matches on each memory access. However, its untyped tags, fixed granularity, and corner-case addressing modes and tag instructions require additional mechanisms to achieve secure and precise enforcement of memory protection policies.
To this end, the dissertation develops three hardware-assisted mechanisms based on MTE, each tailored to a different layer of the ARM software stack: one protects kernel data from untrusted extensions, one provides byte-level access control over shared objects across multiple domains, and one safeguards safe Rust data and metadata in mixed Rust and C/C++ applications. Evaluation on real workloads shows that these designs substantially strengthen memory protection on commodity ARM processors with low overhead, demonstrating that the mechanisms presented in this dissertation enable practical, hardware-assisted memory protection across diverse system contexts.