  Arm Cortex-M processors are the most widely used 32-bit microcontrollers
among embedded and Internet-of-Things devices. Despite the widespread usage,
there has been little effort in summarizing their hardware security features,
characterizing the limitations and vulnerabilities of their hardware and
software stack, and systematizing the research on securing these systems. The
goals and contributions of this paper are multi-fold. First, we analyze the
hardware security limitations and issues of Cortex-M systems. Second, we
conducted a deep study of the software stack designed for Cortex-M and revealed
its limitations, which is accompanied by an empirical analysis of 1,797
real-world firmware. Third, we categorize the reported bugs in Cortex-M
software systems. Finally, we systematize the efforts that aim at securing
Cortex-M systems and evaluate them in terms of the protections they offer,
runtime performance, required hardware features, etc. Based on the insights, we
develop a set of recommendations for the research community and MCU software
developers.
