Re: [PATCH] lib/idr.c: Zero memory properly in idr_remove_all



Kristian Høgsberg wrote:
On Wed, 2009-01-14 at 17:21 +0100, Stefan Richter wrote:
Kristian Høgsberg wrote:
On Tue, 2009-01-13 at 14:48 -0800, Andrew Morton wrote:
What do we think of just removing the constructor and using
kmem_cache_zalloc()?
We still need to zero out the idr_layer before returning it to the idr's
internal free list.
I think so too. But a more robust solution would IMO be to initialize
an idr_layer /before/ use, not /after/ use. Will send a patch later.

The reason it was done this way is that normally, when the layers are
returned to the free list they're already zero'ed out (since their
elements have been removed one by one), so no need to do this on later
re-initialization or when freeing. It's a silly little
sup-optimization.

Ah, right.

idr_remove_all() is different in that it doesn't
incrementally zero out the layer, and so it has to do it using a memset.

If you want rework how this works, I'd suggest just not using the free
list except for in the idr_pre_get()+idr_get() sequence. When a layer
is no longer used, just free it, don't put it back on the free list.
And use kmem_cache_zalloc() in idr_pre_get() as Andrew suggests.

Wait a moment: Nadia's change (which introduced the bug) also already
implements your suggestion. idr_remove_all feeds to the kmem cache now,
not to the free list anymore.

So, Andrew, I take back my assertion that the sequence

idr_remove_all(idr);

if (idr_pre_get(idr, GFP_KERNEL))
id = idr_get_new(idr, p, h);

would be unsafe. Your fix has this covered as well.
--
Stefan Richter
-=====-==--= ---= -===-
http://arcgraph.de/sr/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: 320pin BGA Pin Layout suggestions
    ... I am looing at laying out 320pin BGA on a PCB like this one. ... The pitch between balls is 0.5mm. ... How many PCB layers would you recommend and why ... Got a reason, ...
    (sci.electronics.design)
  • Re: Meaning of the Geological Column
    ... Jurassic Cretaceous and Tertiary layers. ... Tapeats Sandstone and Bright Angel Shale (Cambrian ... Period), Mauv Limestone, Temple Bute Limestone ... " The reason you can do this is because they are all stacked one on ...
    (talk.origins)
  • Re: Schematic Capture and Board Layout Software
    ... something that I can use to design and layout boards to be built by ... I tried KICAD but am so familiar with Easycad that the learning curve seemed ... don't trust myself - with good reason. ... Works up to 16 layers. ...
    (sci.electronics.basics)
  • Re: Meaning of the Geological Column
    ... Jurassic Cretaceous and Tertiary layers. ... The reason you can ... If it is not due to index fossils, ... the formations above and below them. ...
    (talk.origins)
  • Re: photoshop
    ... The Gimp runs fine under Windows. ... IMO, however, its lack of adjustment ... layers is a serious limitation for astronomical image processing. ...
    (sci.astro.amateur)

Loading