SoftBound: Highly Compatible and Complete Spatial Memory Safety for C
Abstract:
The serious bugs and security vulnerabilities facilitated by C/C++'s
lack of bounds checking are well known, yet C and C++ remain in
widespread use. Unfortunately, C's arbitrary pointer arithmetic,
conflation of pointers and arrays, and programmer-visible memory layout
make retrofitting C/C++ with spatial safety guarantees extremely
challenging. Existing approaches suffer from incompleteness, have high
runtime overhead, or require non-trivial changes to the C source code.
Thus far, these deficiencies have prevented widespread adoption of such
techniques.
This paper proposes SoftBound, a compile-time transformation for
enforcing spatial safety of C. Inspired by HardBound, a
previously proposed hardware-assisted approach, SoftBound similarly
records base and bound information for every pointer as disjoint
metadata. This decoupling enables SoftBound to provide
spatial safety without requiring changes to C source code. Unlike
HardBound, SoftBound is a software-only approach and performs
metadata manipulation only when loading or storing pointer values. A
formal proof shows that this is sufficient to provide spatial safety
even in the presence of arbitrary casts. SoftBound's full checking
mode provides complete spatial violation detection with 67%
runtime overhead on average. To further reduce overheads, SoftBound has a store-only checking mode that successfully detects all the
security vulnerabilities in a test suite at the cost of only
21% runtime overhead on average.
Published:
"SoftBound: Highly Compatible and Complete Spatial Memory Safety for C"
Santosh Nagarakatte, Jianzhou Zhao, Milo M K Martin and Steve Zdancewic.
Proceedings of the 2009 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI09)
, Dublin, Ireland, June 2009.
Download:
Paper:
BibTeX Entry:
@inproceedings{SoftBound:PLDI09,
author = {Santosh Nagarakatte and Jianzhou Zhao and Milo M.K. Martin and Steve Zdancewic},
title = {SoftBound: Highly Compatible and Complete Spatial Safety for C},
booktitle = {Proceedings of the 2009 ACM SIGPLAN Conference on Programming Language Design and Implementation},
month = {June},
year = {2009},
location = {Dublin, Ireland},
}