Hardware Support for Low-Cost Memory Safety
Programs written in C/C++ are vulnerable to memory-safety errors like buffer-overflows and use-After-free. While several mechanisms to detect such errors have been previously proposed, they suffer from a variety of drawbacks including poor performance, imprecise or probabilistic detection of errors, or requiring invasive changes to the binary-layout or source-code. Consequently, memory-safety errors continue to exist in production-software and are a principal cause of security problems.In our project at IBM, we worked on a minimally-invasive and low-cost hardware-based bounds-checking framework for preventing out-of-bounds accesses and use-After-free errors. The key idea is to re-purpose "unused bits"in a pointer to store an index into a bounds-information table that can be used to catch out-of-bounds errors and use-After-free errors without any change to the binary layout. Using this bounds-checking framework, we implement a design for preventing Out-of-Bounds accesses and Use-After-Free for heap-objects, that are responsible for the majority of memory-safety errors in the wild.