lib/InsertPoolChecks. This library contains
“ This pass instruments the code with alignment checks. This is required when load/store checks on type-safe memory objects are optimized away; pointers to type-safe memory objects that are loaded from type-unsafe memory objects may not point to a valid memory object or may not be alignment properly within a valid memory object.”
“This pass instruments indirect function calls to ensure that control-flow integrity is preserved at run-time.”
“This file implements a pass to remove special attributes from the run-time checking functions.”
“This pass instruments loads and stores with run-time checks to ensure memory safety.”
“This pass instruments GEPs1 with run-time checks to ensure safe array and structure indexing.”
“This pass instruments calls to deallocators to ensure memory safety.”
“Various passes to register the bound information of variables into the pools”
“Pass to register runtime initialization calls into user-space programs.”
“This pass instruments code to register stack objects with the appropriate pool.”
“Pass to modify SAFECode’s initialization in the program to terminate on the first memory safety error.”
If you could revise
the fundmental principles of
computer system design
to improve security...
... what would you change?