Add assertions.

Check for interior pointers in arena_[ds]alloc().

Check for corrupt pointers in tcache_alloc().
This commit is contained in:
Jason Evans 2010-03-15 16:38:27 -07:00
parent 6b5974403b
commit f00bb7f132
3 changed files with 11 additions and 1 deletions

View File

@ -495,6 +495,9 @@ arena_dalloc(arena_t *arena, arena_chunk_t *chunk, void *ptr)
CHUNK_MAP_PG_MASK) >> CHUNK_MAP_PG_SHIFT)) <<
PAGE_SHIFT));
assert(run->magic == ARENA_RUN_MAGIC);
assert(((uintptr_t)ptr - ((uintptr_t)run +
(uintptr_t)run->bin->reg0_offset)) %
run->bin->reg_size == 0);
bin = run->bin;
malloc_mutex_lock(&bin->lock);
arena_dalloc_bin(arena, chunk, ptr, mapelm);
@ -502,9 +505,11 @@ arena_dalloc(arena_t *arena, arena_chunk_t *chunk, void *ptr)
#ifdef JEMALLOC_TCACHE
}
#endif
} else
} else {
assert(((uintptr_t)ptr & PAGE_MASK) == 0);
arena_dalloc_large(arena, chunk, ptr);
}
}
#endif
#endif /* JEMALLOC_H_INLINES */

View File

@ -181,6 +181,7 @@ tcache_alloc(tcache_t *tcache, size_t size, bool zero)
if (ret == NULL)
return (NULL);
}
assert(arena_salloc(ret) == tcache->arena->bins[binind].reg_size);
if (zero == false) {
#ifdef JEMALLOC_FILL

View File

@ -1492,8 +1492,12 @@ arena_salloc(const void *ptr)
(uintptr_t)((pageind - ((mapbits & CHUNK_MAP_PG_MASK) >>
CHUNK_MAP_PG_SHIFT)) << PAGE_SHIFT));
assert(run->magic == ARENA_RUN_MAGIC);
assert(((uintptr_t)ptr - ((uintptr_t)run +
(uintptr_t)run->bin->reg0_offset)) % run->bin->reg_size ==
0);
ret = run->bin->reg_size;
} else {
assert(((uintptr_t)ptr & PAGE_MASK) == 0);
ret = mapbits & ~PAGE_MASK;
assert(ret != 0);
}