lkml.org 
[lkml]   [2012]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 155/175] slub: Do not hold slub_lock when calling sysfs_slab_add()
    3.3-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Christoph Lameter <cl@linux.com>

    commit 66c4c35c6bc5a1a452b024cf0364635b28fd94e4 upstream.

    sysfs_slab_add() calls various sysfs functions that actually may
    end up in userspace doing all sorts of things.

    Release the slub_lock after adding the kmem_cache structure to the list.
    At that point the address of the kmem_cache is not known so we are
    guaranteed exlusive access to the following modifications to the
    kmem_cache structure.

    If the sysfs_slab_add fails then reacquire the slub_lock to
    remove the kmem_cache structure from the list.

    Reported-by: Sasha Levin <levinsasha928@gmail.com>
    Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: Christoph Lameter <cl@linux.com>
    Signed-off-by: Pekka Enberg <penberg@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    mm/slub.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/mm/slub.c
    +++ b/mm/slub.c
    @@ -3929,13 +3929,14 @@ struct kmem_cache *kmem_cache_create(con
    if (kmem_cache_open(s, n,
    size, align, flags, ctor)) {
    list_add(&s->list, &slab_caches);
    + up_write(&slub_lock);
    if (sysfs_slab_add(s)) {
    + down_write(&slub_lock);
    list_del(&s->list);
    kfree(n);
    kfree(s);
    goto err;
    }
    - up_write(&slub_lock);
    return s;
    }
    kfree(n);



    \
     
     \ /
      Last update: 2012-03-30 23:35    [W:4.277 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site