SSP(3) | Library Functions Manual | SSP(3)

# NAME

`ssp` —
bounds checked libc functions

# LIBRARY

Buffer Overflow Protection Library (libssp, -lssp)

# SYNOPSIS

`#include <ssp/stdio.h>`

int
`sprintf`(char *str, const char *fmt, ...);

int
`vsprintf`(char *str, const char *fmt, va_list ap);

int
`snprintf`(char *str, size_t len, const char *fmt, ...);

int
`vsnprintf`(char *str, size_t len, const char *fmt, va_list ap);

char *
`gets`(char *str);

char *
`fgets`(char *str, int len, FILE *fp);

`#include <ssp/string.h>`

void *
`memcpy`(void *str, const void *ptr, size_t len);

void *
`memmove`(void *str, const void *ptr, size_t len);

void *
`memset`(void *str, int val, size_t len);

char *
`stpcpy`(char *str, const char *ptr);

char *
`strcpy`(char *str, const char *ptr);

char *
`strcat`(char *str, const char *ptr);

char *
`strncpy`(char *str, const char *ptr, size_t len);

char *
`strncat`(char *str, const char *ptr, size_t len);

`#include <ssp/strings.h>`

void *
`bcopy`(const void *ptr, void *str, size_t len);

void *
`bzero`(void *str, size_t len);

`#include <ssp/unistd.h>`

ssize_t
`read`(int fd, void *str, size_t len);

int
`readlink`(const char * restrict path, char * restrict str, size_t len);

int
`getcwd`(char *str, size_t len);

# DESCRIPTION

When `_FORTIFY_SOURCE` bounds checking is enabled as described below, the above functions get overwritten to use the __builtin_object_size(3) function to compute the size of str, if known at compile time, and perform bounds check on it in order to avoid data buffer or stack buffer overflows. If an overflow is detected, the routines will call abort(3).

To enable these function overrides the following should be added to the gcc(1) command line: “-D_FORTIFY_SOURCE=1” or “-D_FORTIFY_SOURCE=2”.

If `_FORTIFY_SOURCE is set to` `1` the code will compute the maximum possible buffer size for str, and if set to `2` it will compute the minimum buffer size.

# SEE ALSO

gcc(1), __builtin_object_size(3), stdio(3), string(3), security(7)

# HISTORY

The `ssp` library appeared NetBSD 4.0.

December 3, 2015 | NetBSD 9.0