Messages in this thread Patch in this message | | | Date | Sun, 26 Jan 2003 19:18:48 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH?] slab.c |
| |
Andries.Brouwer@cwi.nl wrote: > > In slab.c the routine check_poison_obj() is called. > That routine does nothing except return 0 or 1. > Thus it looks like the present call in slab_destroy() > is meaningless. Perhaps something like this was meant? >
Sharp eyes. It obviously got lost somewhere.
We've been moving away from generating informationless BUG()s in there, toward emitting more info and trying to continue. So I made this change:
diff -puN mm/slab.c~slab-poisoning-fix mm/slab.c --- 25/mm/slab.c~slab-poisoning-fix 2003-01-26 19:10:54.000000000 -0800 +++ 25-akpm/mm/slab.c 2003-01-26 19:13:01.000000000 -0800 @@ -769,7 +769,7 @@ static void poison_obj(kmem_cache_t *cac *(unsigned char *)(addr+size-1) = POISON_END; } -static int check_poison_obj (kmem_cache_t *cachep, void *addr) +static void check_poison_obj(kmem_cache_t *cachep, void *addr) { int size = cachep->objsize; void *end; @@ -779,8 +779,7 @@ static int check_poison_obj (kmem_cache_ } end = memchr(addr, POISON_END, size); if (end != (addr+size-1)) - return 1; - return 0; + slab_error(cachep, "object was modified after freeing"); } #endif @@ -1630,8 +1629,7 @@ cache_alloc_debugcheck_after(kmem_cache_ if (!objp) return objp; if (cachep->flags & SLAB_POISON) - if (check_poison_obj(cachep, objp)) - BUG(); + check_poison_obj(cachep, objp); if (cachep->flags & SLAB_RED_ZONE) { /* Set alloc red-zone, and check old one. */ if (xchg((unsigned long *)objp, RED_ACTIVE) != RED_INACTIVE)
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |