Messages in this thread | | | Date | Wed, 14 Jan 2009 09:19:01 +0200 | From | "Pekka Enberg" <> | Subject | Re: [PATCH] lib/idr.c: Zero memory properly in idr_remove_all |
| |
On Wed, Jan 14, 2009 at 12:48 AM, Andrew Morton <akpm@linux-foundation.org> wrote: >> If the idr code passes uninitialized objects to kmem_cache_free(), then >> the next kmem_cache_alloc will return a bad object. >> > > None of this got us much closer to fixing the bug ;) > > What do we think of just removing the constructor and using > kmem_cache_zalloc()?
Why do I get the feeling that we have merged a similar patch before?
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
> > --- a/lib/idr.c~a > +++ a/lib/idr.c > @@ -121,7 +121,7 @@ int idr_pre_get(struct idr *idp, gfp_t g > { > while (idp->id_free_cnt < IDR_FREE_MAX) { > struct idr_layer *new; > - new = kmem_cache_alloc(idr_layer_cache, gfp_mask); > + new = kmem_cache_zalloc(idr_layer_cache, gfp_mask); > if (new == NULL) > return (0); > move_to_free_list(idp, new); > @@ -623,16 +623,10 @@ void *idr_replace(struct idr *idp, void > } > EXPORT_SYMBOL(idr_replace); > > -static void idr_cache_ctor(void *idr_layer) > -{ > - memset(idr_layer, 0, sizeof(struct idr_layer)); > -} > - > void __init idr_init_cache(void) > { > idr_layer_cache = kmem_cache_create("idr_layer_cache", > - sizeof(struct idr_layer), 0, SLAB_PANIC, > - idr_cache_ctor); > + sizeof(struct idr_layer), 0, SLAB_PANIC, NULL); > } > > /** > _ > > -- > 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/ >
| |