58 lines
2.0 KiB
TeX
58 lines
2.0 KiB
TeX
@node Overflow Protection
|
|
@chapter Overflow Protection
|
|
|
|
@menu
|
|
* Stack Smashing Protection:: Checks enabled with -fstack-protector*
|
|
* Object Size Checking:: Checks enabled with _FORTIFY_SOURCE
|
|
@end menu
|
|
|
|
@node Stack Smashing Protection
|
|
@section Stack Smashing Protection
|
|
Stack Smashing Protection is a compiler feature which emits extra code
|
|
to check for stack smashing attacks. It depends on a canary, which is
|
|
initialized with the process, and functions for process termination when
|
|
an overflow is detected. These are private entry points intended solely
|
|
for use by the compiler, and are used when any of the @code{-fstack-protector},
|
|
@code{-fstack-protector-all}, @code{-fstack-protector-explicit}, or
|
|
@code{-fstack-protector-strong} compiler flags are enabled.
|
|
|
|
@node Object Size Checking
|
|
@section Object Size Checking
|
|
Object Size Checking is a feature which wraps certain functions with checks
|
|
to prevent buffer overflows. These are enabled when compiling with
|
|
optimization (@code{-O1} and higher) and @code{_FORTIFY_SOURCE} defined
|
|
to 1, or for stricter checks, to 2.
|
|
|
|
@cindex list of overflow protected functions
|
|
The following functions use object size checking to detect buffer overflows
|
|
when enabled:
|
|
|
|
@example
|
|
@exdent @emph{String functions:}
|
|
bcopy memmove strcpy
|
|
bzero mempcpy strcat
|
|
explicit_bzero memset strncat
|
|
memcpy stpcpy strncpy
|
|
|
|
@exdent @emph{Wide Character String functions:}
|
|
fgetws wcrtomb wcsrtombs
|
|
fgetws_unlocked wcscat wmemcpy
|
|
mbsnrtowcs wcscpy wmemmove
|
|
mbsrtowcs wcsncat wmempcpy
|
|
wcpcpy wcsncpy wmemset
|
|
wcpncpy wcsnrtombs
|
|
|
|
@exdent @emph{Stdio functions:}
|
|
fgets fread_unlocked sprintf
|
|
fgets_unlocked gets vsnprintf
|
|
fread snprintf vsprintf
|
|
|
|
@exdent @emph{Stdlib functions:}
|
|
mbstowcs wcstombs wctomb
|
|
|
|
@exdent @emph{System functions:}
|
|
getcwd read ttyname_r
|
|
pread readlink
|
|
|
|
@end example
|