From 1e306fd64276aaa68eae4ffa26b68cd84092c37e Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 29 Jan 2015 10:47:54 +0000 Subject: Trap if memcpy() pointers are overlapping Maybe this should only be done if _FORTIFY_SOURCE > 1. --- include/string.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include') diff --git a/include/string.h b/include/string.h index 565f70e..60629d1 100644 --- a/include/string.h +++ b/include/string.h @@ -10,7 +10,13 @@ void * __fortify_memcpy(void *__restrict dest, const void *__restrict src, size_t n) { size_t bos = __builtin_object_size(dest, 0); + char *d = dest; + const char *s = src; + /* trap if pointers are overlapping */ + if ((d <= s && d + n > s) || + (s <= d && s + n > d)) + __builtin_trap(); if (n > bos) __builtin_trap(); return memcpy(dest, src, n); -- cgit v1.3