UBSAN uses compile-time instrumentation to catch undefined behavior (UB). Compiler inserts code that perform certain kinds of checks before operations that could cause UB. If check fails (i.e. UB detected) __ubsan_handle_* function called to print error message. So the most of the work is done by compiler. This patch just implements ubsan handlers printing errors. GCC has this capability since 4.9.x [1] (see -fsanitize=undefined option and its suboptions). However GCC 5.x has more checkers implemented [2]. Article [3] has a bit more details about UBSAN in the GCC. [1] - https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Debugging-Options.html [2] - https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html [3] - http://developerblog.redhat.com/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/ Issues which UBSAN has found thus far are: Found bugs: * out-of-bounds access - |
||
|---|---|---|
| .. | ||
| libstub | ||
| arm-init.c | ||
| arm-runtime.c | ||
| cper.c | ||
| efi-pstore.c | ||
| efi.c | ||
| efivars.c | ||
| esrt.c | ||
| fake_mem.c | ||
| Kconfig | ||
| Makefile | ||
| reboot.c | ||
| runtime-map.c | ||
| runtime-wrappers.c | ||
| vars.c | ||