lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 6 Jul 2012 08:56:04 -0500 (CDT) From: Christoph Lameter <cl@...ux.com> To: Li Zhong <zhong@...ux.vnet.ibm.com> cc: LKML <linux-kernel@...r.kernel.org>, Pekka Enberg <penberg@...nel.org>, Matt Mackall <mpm@...enic.com>, Benjamin Herrenschmidt <benh@...nel.crashing.org>, Paul Mackerras <paulus@...ba.org>, linux-mm <linux-mm@...ck.org>, PowerPC email list <linuxppc-dev@...ts.ozlabs.org>, Wanlong Gao <gaowanlong@...fujitsu.com>, Glauber Costa <glommer@...allels.com> Subject: Re: [PATCH SLAB 1/2 v3] duplicate the cache name in SLUB's saved_alias list, SLAB, and SLOB I thought I posted this a couple of days ago. Would this not fix things without having to change all the allocators? Subject: slub: Dup name earlier in kmem_cache_create Dup the name earlier in kmem_cache_create so that alias processing is done using the copy of the string and not the string itself. Signed-off-by: Christoph Lameter <cl@...ux.com> --- mm/slub.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2012-06-11 08:49:56.000000000 -0500 +++ linux-2.6/mm/slub.c 2012-07-03 15:17:37.000000000 -0500 @@ -3933,8 +3933,12 @@ struct kmem_cache *kmem_cache_create(con if (WARN_ON(!name)) return NULL; + n = kstrdup(name, GFP_KERNEL); + if (!n) + goto out; + down_write(&slub_lock); - s = find_mergeable(size, align, flags, name, ctor); + s = find_mergeable(size, align, flags, n, ctor); if (s) { s->refcount++; /* @@ -3944,7 +3948,7 @@ struct kmem_cache *kmem_cache_create(con s->objsize = max(s->objsize, (int)size); s->inuse = max_t(int, s->inuse, ALIGN(size, sizeof(void *))); - if (sysfs_slab_alias(s, name)) { + if (sysfs_slab_alias(s, n)) { s->refcount--; goto err; } @@ -3952,31 +3956,26 @@ struct kmem_cache *kmem_cache_create(con return s; } - n = kstrdup(name, GFP_KERNEL); - if (!n) - goto err; - s = kmalloc(kmem_size, GFP_KERNEL); if (s) { 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; - } - return s; + if (!sysfs_slab_add(s)) + return s; + + down_write(&slub_lock); + list_del(&s->list); } kfree(s); } - kfree(n); + err: + kfree(n); up_write(&slub_lock); +out: if (flags & SLAB_PANIC) panic("Cannot create slabcache %s\n", name); else -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists