From 491bcd3a92a3585cbbe6a1aa59aae18bf141a7c5 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 5 Jul 2012 07:58:05 +0000 Subject: [PATCH] -LRN: Portable memory poisoning: Uses GNU extension function as a non-W32 equivalent of msize() (there are subtle differences, but they are of no consequence). Also swaps the poison bits depending on endianness (i'm tired of seeing 0xdf0adba everywhere instead of 0xbaadf00d). --- src/util/common_allocation.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/util/common_allocation.c b/src/util/common_allocation.c index c86185685..a385450b9 100644 --- a/src/util/common_allocation.c +++ b/src/util/common_allocation.c @@ -182,6 +182,24 @@ GNUNET_xrealloc_ (void *ptr, size_t n, const char *filename, int linenumber) } +# if __BYTE_ORDER == __LITTLE_ENDIAN +#define BAADFOOD_STR "\x0D\xF0\xAD\xBA" +#endif +# if __BYTE_ORDER == __BIG_ENDIAN +#define BAADFOOD_STR "\xBA\xAD\xF0\x0D" +#endif + +#if WINDOWS +#define MSIZE(p) _msize (p) +#endif +#if LINUX +/* FIXME: manpage claims that this function is a GNU extension, + * but googling shows that it is available on many platforms via + * inclusion of various headers. For now let's make it Linux-only. + */ +#define MSIZE(p) malloc_usable_size (p) +#endif + /** * Free memory. Merely a wrapper for the case that we * want to keep track of allocations. @@ -198,12 +216,12 @@ GNUNET_xfree_ (void *ptr, const char *filename, int linenumber) ptr = &((size_t *) ptr)[-1]; mem_used -= *((size_t *) ptr); #endif -#if WINDOWS +#if defined(MSIZE) #if ENABLE_POISONING { size_t i; - char baadfood[4] = "\xBA\xAD\xF0\x0D"; - size_t s = _msize (ptr); + char baadfood[5] = BAADFOOD_STR; + size_t s = MSIZE (ptr); for (i = 0; i < s; i++) ((char *) ptr)[i] = baadfood[i % 4]; } -- 2.25.1