On Tue, Jan 17, 2012 at 5:30 PM, Eric Dumazet <eric.dumazet@xxxxxxxxx> 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@xxxxxxxxx> >> Signed-off-by: Christoph Lameter <cl@xxxxxxxxx> >> >> --- >> 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@xxxxxxxxx> 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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href