CHERIoT is MS Research’s Portmeirion project’s effort to scale CHERI down to 32-bit, embedded (MMU-less) systems. It is exciting and amazing (if I may be so bold) and I really hope it takes over the world; towards that end, in addition to publishing the tech report, we have open-sourced

We also wrote two blog posts about the effort:

My role in this project has been somewhat more advisory and in design phases, but I was directly responsible for the implementation of a few fun components of the RTOS, including the shared heap allocator, the “fast object unsealer”, and our exception vector’s anti-reentrancy guards.

Sadly, Microsoft has disbanded the Portmeirion team, and Hongyan, Saar, and David have all left the company while Robert and I have been “redeployed” onto non-CHERI topics, so on-going work is somewhat scattered. Look for CHERIoT to be further developed largely elsewhere.


Small embedded cores have little area to spare for security features and yet must often run code written in unsafe languages and, increasingly, are exposed to the hostile Internet. CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) builds on top of CHERI and RISC-V to provide an ISA and software model that lets software depend on object-granularity spatial memory safety, deterministic use-after-free protection, and lightweight compartmentalization exposed directly to the C/C++ language model. This can run existing embedded software components on a clean-slate RTOS that scales up to large numbers of isolated (yet securely communicating) compartments, even on systems with under 256 KiB of SRAM. This technical report is accompanied by three open source releases.


  title   = {{CHERIoT}: {Rethinking} security for low-cost embedded systems},
  url     = {},
  number  = {MSR-TR-2023-6},
  author  = {Amar, Saar and Chen, Tony and Chisnall, David and Domke, Felix
            and Filardo, Nathaniel and Liu, Kunyan and Norton-Wright, Robert
            and Tao, Yucong and N. M. Watson, Robert and Xia, Hongyan},
  month   = {feb},
  year    = {2023}