talloc: use VALGRIND_MAKE_MEM_UNDEFINED() before memmove()
authorStefan Metzmacher <metze@samba.org>
Mon, 4 Apr 2011 14:46:21 +0000 (16:46 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 8 Apr 2011 07:28:10 +0000 (09:28 +0200)
metze

Signed-off-By: Andrew Tridgell <tridge@samba.org>
lib/talloc/talloc.c

index 4aa85d068c4c69d20c58c78c41dae0ad54cf8dc3..8dec01fd4129c016ec441d98dd2e3ed02c7df65c 100644 (file)
@@ -1321,6 +1321,18 @@ _PUBLIC_ void *_talloc_realloc(const void *context, void *ptr, size_t size, cons
                        if (space_left >= space_needed) {
                                size_t old_used = TC_HDR_SIZE + tc->size;
                                pool_tc->pool = TC_POOL_FIRST_CHUNK(pool_tc);
+#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_UNDEFINED)
+                               /*
+                                * we need to prepare the memmove into
+                                * the unaccessable area.
+                                */
+                               {
+                                       size_t diff = PTR_DIFF(tc, pool_tc->pool);
+                                       size_t flen = MIN(diff, old_used);
+                                       char *fptr = (char *)pool_tc->pool;
+                                       VALGRIND_MAKE_MEM_UNDEFINED(fptr, flen);
+                               }
+#endif
                                memmove(pool_tc->pool, tc, old_used);
                                new_ptr = pool_tc->pool;