From 52d4c979802345f03193258af7f120de4bcae1ff Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 29 Jan 2015 10:43:00 +0000 Subject: Add bcopy() checks --- include/strings.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 include/strings.h diff --git a/include/strings.h b/include/strings.h new file mode 100644 index 0000000..db08cc9 --- /dev/null +++ b/include/strings.h @@ -0,0 +1,28 @@ +#ifndef FORTIFY_STRINGS_H_ +#define FORTIFY_STRINGS_H_ + +#include_next + +#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ + || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) + +static inline __attribute__ ((always_inline)) +void __fortify_bcopy(const void *__restrict src, void *__restrict dest, size_t n) +{ + size_t bos = __builtin_object_size(dest, 0); + + if (n > bos) + __builtin_trap(); + return bcopy(src, dest, n); +} + +#undef bcopy +#define bcopy(src, dest, n) __fortify_bcopy(src, dest, n) +#endif + +#endif + +#endif -- cgit v1.3