diff options
author | Yanjiang Jin <yanjiang.jin@windriver.com> | 2015-02-27 00:30:34 -0500 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-03-26 00:23:17 -0400 |
commit | e77553cb21adabb7680930e7b20c578cec7ae5a8 (patch) | |
tree | d0be2da988ce69a2e5ba5b972c1bf07f60197833 /arch/powerpc/mm/init_64.c | |
parent | 288a298c05774dde0a8d5abac9b692503d4e41f2 (diff) |
powerpc/mm: Free string after creating kmem cache
kmem_cache_create()->kmem_cache_create_memcg()->kstrdup() allocates new
space and copys name's content, so it is safe to free name memory after
calling kmem_cache_create(). Else kmemleak will report the below
warning:
unreferenced object 0xc0000000f9002160 (size 16):
comm "swapper/0", pid 0, jiffies 4294892296 (age 1386.640s)
hex dump (first 16 bytes):
70 67 74 61 62 6c 65 2d 32 5e 39 00 de ad be ef pgtable-2^9.....
backtrace:
[<c0000000004e03ec>] .kvasprintf+0x5c/0xa0
[<c0000000004e045c>] .kasprintf+0x2c/0x50
[<c00000000002e36c>] .pgtable_cache_add+0xac/0x100
[<c00000000002e3e4>] .pgtable_cache_init+0x24/0x80
[<c000000000c6c67c>] .start_kernel+0x228/0x4c8
[<c000000000000594>] .start_here_common+0x24/0x90
Signed-off-by: Yanjiang Jin <yanjiang.jin@windriver.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/mm/init_64.c')
-rw-r--r-- | arch/powerpc/mm/init_64.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c index 10471f9bb63f..d747dd7bc90b 100644 --- a/arch/powerpc/mm/init_64.c +++ b/arch/powerpc/mm/init_64.c | |||
@@ -132,6 +132,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *)) | |||
132 | align = max_t(unsigned long, align, minalign); | 132 | align = max_t(unsigned long, align, minalign); |
133 | name = kasprintf(GFP_KERNEL, "pgtable-2^%d", shift); | 133 | name = kasprintf(GFP_KERNEL, "pgtable-2^%d", shift); |
134 | new = kmem_cache_create(name, table_size, align, 0, ctor); | 134 | new = kmem_cache_create(name, table_size, align, 0, ctor); |
135 | kfree(name); | ||
135 | pgtable_cache[shift - 1] = new; | 136 | pgtable_cache[shift - 1] = new; |
136 | pr_debug("Allocated pgtable cache for order %d\n", shift); | 137 | pr_debug("Allocated pgtable cache for order %d\n", shift); |
137 | } | 138 | } |