projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
a8f0f9e
)
tracing: Fix kmemleak in tracing_map_array_free()
author
Chunyu Hu
<chuhu@redhat.com>
Mon, 14 Aug 2017 10:18:17 +0000
(18:18 +0800)
committer
Steven Rostedt (VMware)
<rostedt@goodmis.org>
Thu, 24 Aug 2017 14:05:51 +0000
(10:05 -0400)
kmemleak reported the below leak when I was doing clear of the hist
trigger. With this patch, the kmeamleak is gone.
unreferenced object 0xffff94322b63d760 (size 32):
comm "bash", pid 1522, jiffies
4403687962
(age 2442.311s)
hex dump (first 32 bytes):
00 01 00 00 04 00 00 00 08 00 00 00 ff 00 00 00 ................
10 00 00 00 00 00 00 00 80 a8 7a f2 31 94 ff ff ..........z.1...
backtrace:
[<
ffffffff9e96c27a
>] kmemleak_alloc+0x4a/0xa0
[<
ffffffff9e424cba
>] kmem_cache_alloc_trace+0xca/0x1d0
[<
ffffffff9e377736
>] tracing_map_array_alloc+0x26/0x140
[<
ffffffff9e261be0
>] kretprobe_trampoline+0x0/0x50
[<
ffffffff9e38b935
>] create_hist_data+0x535/0x750
[<
ffffffff9e38bd47
>] event_hist_trigger_func+0x1f7/0x420
[<
ffffffff9e38893d
>] event_trigger_write+0xfd/0x1a0
[<
ffffffff9e44dfc7
>] __vfs_write+0x37/0x170
[<
ffffffff9e44f552
>] vfs_write+0xb2/0x1b0
[<
ffffffff9e450b85
>] SyS_write+0x55/0xc0
[<
ffffffff9e203857
>] do_syscall_64+0x67/0x150
[<
ffffffff9e977ce7
>] return_from_SYSCALL_64+0x0/0x6a
[<
ffffffffffffffff
>] 0xffffffffffffffff
unreferenced object 0xffff9431f27aa880 (size 128):
comm "bash", pid 1522, jiffies
4403687962
(age 2442.311s)
hex dump (first 32 bytes):
00 00 8c 2a 32 94 ff ff 00 f0 8b 2a 32 94 ff ff ...*2......*2...
00 e0 8b 2a 32 94 ff ff 00 d0 8b 2a 32 94 ff ff ...*2......*2...
backtrace:
[<
ffffffff9e96c27a
>] kmemleak_alloc+0x4a/0xa0
[<
ffffffff9e425348
>] __kmalloc+0xe8/0x220
[<
ffffffff9e3777c1
>] tracing_map_array_alloc+0xb1/0x140
[<
ffffffff9e261be0
>] kretprobe_trampoline+0x0/0x50
[<
ffffffff9e38b935
>] create_hist_data+0x535/0x750
[<
ffffffff9e38bd47
>] event_hist_trigger_func+0x1f7/0x420
[<
ffffffff9e38893d
>] event_trigger_write+0xfd/0x1a0
[<
ffffffff9e44dfc7
>] __vfs_write+0x37/0x170
[<
ffffffff9e44f552
>] vfs_write+0xb2/0x1b0
[<
ffffffff9e450b85
>] SyS_write+0x55/0xc0
[<
ffffffff9e203857
>] do_syscall_64+0x67/0x150
[<
ffffffff9e977ce7
>] return_from_SYSCALL_64+0x0/0x6a
[<
ffffffffffffffff
>] 0xffffffffffffffff
Link:
http://lkml.kernel.org/r/1502705898-27571-1-git-send-email-chuhu@redhat.com
Cc: stable@vger.kernel.org
Fixes: 08d43a5fa063 ("tracing: Add lock-free tracing_map")
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/tracing_map.c
patch
|
blob
|
history
diff --git
a/kernel/trace/tracing_map.c
b/kernel/trace/tracing_map.c
index 0a689bbb78ef4fe48d9e55cb867e836aea87a726..305039b122fafba242f73b5982289ce4a12a6e20 100644
(file)
--- a/
kernel/trace/tracing_map.c
+++ b/
kernel/trace/tracing_map.c
@@
-221,16
+221,19
@@
void tracing_map_array_free(struct tracing_map_array *a)
if (!a)
return;
- if (!a->pages) {
- kfree(a);
- return;
- }
+ if (!a->pages)
+ goto free;
for (i = 0; i < a->n_pages; i++) {
if (!a->pages[i])
break;
free_page((unsigned long)a->pages[i]);
}
+
+ kfree(a->pages);
+
+ free:
+ kfree(a);
}
struct tracing_map_array *tracing_map_array_alloc(unsigned int n_elts,