If INVARIANTS is specified, add ctor/dtor to junk memory if they are
unspecified... Submitted by: Suresh Gumpula at Netapp Differential Revision: https://reviews.freebsd.org/D2725
This commit is contained in:
parent
de5ab6b0ab
commit
afc6dc3669
@ -1940,6 +1940,20 @@ uma_zcreate(const char *name, size_t size, uma_ctor ctor, uma_dtor dtor,
|
||||
args.dtor = dtor;
|
||||
args.uminit = uminit;
|
||||
args.fini = fini;
|
||||
#ifdef INVARIANTS
|
||||
/*
|
||||
* If a zone is being created with an empty constructor and
|
||||
* destructor, pass UMA constructor/destructor which checks for
|
||||
* memory use after free.
|
||||
*/
|
||||
if ((!(flags & UMA_ZONE_ZINIT)) && ctor == NULL && dtor == NULL &&
|
||||
uminit == NULL && fini == NULL) {
|
||||
args.ctor = trash_ctor;
|
||||
args.dtor = trash_dtor;
|
||||
args.uminit = trash_init;
|
||||
args.fini = trash_fini;
|
||||
}
|
||||
#endif
|
||||
args.align = align;
|
||||
args.flags = flags;
|
||||
args.keg = NULL;
|
||||
|
@ -69,8 +69,13 @@ trash_ctor(void *mem, int size, void *arg, int flags)
|
||||
|
||||
for (p = mem; cnt > 0; cnt--, p++)
|
||||
if (*p != uma_junk) {
|
||||
#ifdef INVARIANTS
|
||||
panic("Memory modified after free %p(%d) val=%x @ %p\n",
|
||||
mem, size, *p, p);
|
||||
#else
|
||||
printf("Memory modified after free %p(%d) val=%x @ %p\n",
|
||||
mem, size, *p, p);
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
return (0);
|
||||
|
Loading…
Reference in New Issue
Block a user