From c49f6215ea82e87bd6783664a1f7946cebc9344e Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 28 Jan 2015 17:44:38 +0000 Subject: Add mempcpy() checks --- include/string.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/string.h b/include/string.h index d1bbac2..7e690c1 100644 --- a/include/string.h +++ b/include/string.h @@ -102,6 +102,18 @@ char *__fortify_strncpy(char *__restrict dest, const char *__restrict src, size_ return strncpy(dest, src, n); } +#if defined(_GNU_SOURCE) +static inline __attribute__ ((always_inline)) +void *__fortify_mempcpy(void *__restrict dest, const void *__restrict src, size_t n) +{ + size_t bos = __builtin_object_size(dest, 0); + + if (n > bos) + __builtin_trap(); + return mempcpy(dest, src, n); +} +#endif + #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) static inline __attribute__ ((always_inline)) size_t __fortify_strlcat(char *__restrict dest, const char *__restrict src, size_t n) @@ -143,6 +155,11 @@ size_t __fortify_strlcpy(char *__restrict dest, const char *__restrict src, size #undef strncpy #define strncpy(dest, src, n) __fortify_strcpy(dest, src, n) +#if defined(_GNU_SOURCE) +#undef mempcpy +#define mempcpy(dest, src, n) __fortify_mempcpy(dest, src, n) +#endif + #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #undef strlcat #define strlcat(dest, src, n) __fortify_strlcat(dest, src, n) -- cgit v1.3