RangeSanitizer: Detecting Memory Errors with Efficient Range Checks
Description
Sanitizers for spatial and temporal memory errors have become a cornerstone of security testing. Popular redzone-based
sanitizers such as AddressSanitizer (ASan) offer high compatibility and effectiveness through the use of redzones, but incur significant runtime overhead. A major cause of this overhead is the traditional use of per-object redzone metadata, which
constrains the sanitizer to check individual addresses rather than entire ranges of memory at once—as is done by classic
bounds checkers based on per-pointer metadata.
In this paper, we introduce RangeSanitizer (RSan), a redzone-based sanitizer that introduces a novel metadata and check paradigm. RSan combines the compatibility of redzones with a rich per-object metadata format that allows for range (rather than address) checks and powerful optimizations. RSan stores bounds information inside the underflow redzone associated with each memory object. By combining pointer tagging with power-of-two size classes, RSan can swiftly locate metadata and validate an access to an arbitrary memory range with a single check. RSan incurs a geomean runtime overhead of 44% on SPEC CPU2017, faster than all state-of-the-art redzone-based sanitizers and twice as fast as ASan. Additionally, fuzzing with AFL++ and RSan as sanitizer improves state-of-the-art throughput by up to 70%.
Files
sec25cycle1-prepub-163-gorter.pdf
Files
(1.3 MB)
Name | Size | Download all |
---|---|---|
md5:e3c20385cd9578a3c63f018cef2150a8
|
1.3 MB | Preview Download |