lkml.org 
[lkml]   [2012]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: Hung task when calling clone() due to netfilter/slab
    From
    On Tue, Jan 17, 2012 at 5:30 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
    > Le mardi 17 janvier 2012 à 09:27 -0600, Christoph Lameter a écrit :
    >
    >> Subject: slub: Do not hold slub_lock when calling sysfs_slab_add()
    >>
    >> 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>
    >> Signed-off-by: Christoph Lameter <cl@linux.com>
    >>
    >> ---
    >>  mm/slub.c |    3 ++-
    >>  1 file changed, 2 insertions(+), 1 deletion(-)
    >>
    >> Index: linux-2.6/mm/slub.c
    >> ===================================================================
    >> --- linux-2.6.orig/mm/slub.c  2012-01-17 03:07:11.140010438 -0600
    >> +++ linux-2.6/mm/slub.c       2012-01-17 03:26:06.799986908 -0600
    >> @@ -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);
    >
    > Thanks !
    >
    > Acked-by: Eric Dumazet <eric.dumazet@gmail.com>

    I'm planning to queue this for v3.4 and tagging it for -stable for
    v3.3. Do we need this for older versions as well?

    Pekka
    --
    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/

    \
     
     \ /
      Last update: 2012-02-01 09:09    [W:0.022 / U:0.600 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site