φ(・・*)ゞ ウーン
久々に見たらびっくりですよΣ(´∀`;)
[ 677.488751] kmemleak: 14348 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
ここまでいくとむしろウケますがw
そんなことはさておき、まずは適当なシェルスクリプトでメモリリークの内訳を見てみますと、
#!/bin/sh
modules=`grep " comm" kmemleak.txt | cut -f2 -d"\\"" | sort | uniq`
for mod in $modules
do
echo -n $mod ":"
grep "comm \\"$mod\\"" kmemleak.txt | wc -l
doneこのようにsystemdでやたらリークしているのがわかります。
[masami@rune:~]$ ./count.sh modprobe :5 swapper/0 :3 systemd :14339 udevd :1
これがどんな感じかというと
unreferenced object 0xffff88024ec25c20 (size 32):
comm "systemd", pid 1, jiffies 4294677927 (age 7500.381s)
hex dump (first 32 bytes):
ff 0f 00 00 23 04 00 00 07 00 00 00 00 00 00 00 ....#...........
b0 09 65 51 02 88 ff ff 00 00 00 00 00 00 00 00 ..eQ............
backtrace:
[<ffffffff815dc5db>] kmemleak_alloc+0x5b/0xc0
[<ffffffff8116b096>] kmem_cache_alloc_trace+0xb6/0x160
[<ffffffff8128331c>] policydb_read+0x100c/0x1260
[<ffffffff81287a99>] security_load_policy+0x59/0x480
[<ffffffff8127a831>] sel_write_load+0xa1/0x720
[<ffffffff81180eac>] vfs_write+0xac/0x180
[<ffffffff811811da>] sys_write+0x4a/0x90
[<ffffffff81605029>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
unreferenced object 0xffff88024ec24408 (size 8):
comm "systemd", pid 1, jiffies 4294677927 (age 7500.392s)
hex dump (first 8 bytes):
62 09 00 00 02 88 ff ff b.......
backtrace:
[<ffffffff815dc5db>] kmemleak_alloc+0x5b/0xc0
[<ffffffff8116b096>] kmem_cache_alloc_trace+0xb6/0x160
[<ffffffff81283347>] policydb_read+0x1037/0x1260
[<ffffffff81287a99>] security_load_policy+0x59/0x480
[<ffffffff8127a831>] sel_write_load+0xa1/0x720
[<ffffffff81180eac>] vfs_write+0xac/0x180
[<ffffffff811811da>] sys_write+0x4a/0x90
[<ffffffff81605029>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
unreferenced object 0xffff8802516509b0 (size 16):
comm "systemd", pid 1, jiffies 4294677927 (age 7500.392s)
hex dump (first 16 bytes):
63 65 72 74 69 66 69 63 61 74 65 73 00 92 63 00 certificates..c.
backtrace:
[<ffffffff815dc5db>] kmemleak_alloc+0x5b/0xc0
[<ffffffff8116acb8>] __kmalloc+0x138/0x1a0
[<ffffffff81283382>] policydb_read+0x1072/0x1260
[<ffffffff81287a99>] security_load_policy+0x59/0x480
[<ffffffff8127a831>] sel_write_load+0xa1/0x720
[<ffffffff81180eac>] vfs_write+0xac/0x180
[<ffffffff811811da>] sys_write+0x4a/0x90
[<ffffffff81605029>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
unreferenced object 0xffff88024ec25c40 (size 32):
comm "systemd", pid 1, jiffies 4294677927 (age 7500.392s)
hex dump (first 32 bytes):
ff 0f 00 00 f7 02 00 00 07 00 00 00 00 00 00 00 ................
18 44 c2 4e 02 88 ff ff 00 00 00 00 00 00 00 00 .D.N............
backtrace:
[<ffffffff815dc5db>] kmemleak_alloc+0x5b/0xc0
[<ffffffff8116b096>] kmem_cache_alloc_trace+0xb6/0x160
[<ffffffff8128331c>] policydb_read+0x100c/0x1260
[<ffffffff81287a99>] security_load_policy+0x59/0x480
[<ffffffff8127a831>] sel_write_load+0xa1/0x720
[<ffffffff81180eac>] vfs_write+0xac/0x180
[<ffffffff811811da>] sys_write+0x4a/0x90
[<ffffffff81605029>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
unreferenced object 0xffff88024ec24410 (size 8):
comm "systemd", pid 1, jiffies 4294677927 (age 7500.392s)
hex dump (first 8 bytes):
ea 0a 00 00 02 88 ff ff ........
backtrace:
[<ffffffff815dc5db>] kmemleak_alloc+0x5b/0xc0
[<ffffffff8116b096>] kmem_cache_alloc_trace+0xb6/0x160
[<ffffffff81283347>] policydb_read+0x1037/0x1260
[<ffffffff81287a99>] security_load_policy+0x59/0x480
[<ffffffff8127a831>] sel_write_load+0xa1/0x720
[<ffffffff81180eac>] vfs_write+0xac/0x180
[<ffffffff811811da>] sys_write+0x4a/0x90
[<ffffffff81605029>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
unreferenced object 0xffff88024ec24418 (size 8):
comm "systemd", pid 1, jiffies 4294677927 (age 7500.392s)
hex dump (first 8 bytes):
62 69 6e 00 02 88 ff ff bin.....
backtrace:
[<ffffffff815dc5db>] kmemleak_alloc+0x5b/0xc0
[<ffffffff8116acb8>] __kmalloc+0x138/0x1a0
[<ffffffff81283382>] policydb_read+0x1072/0x1260
[<ffffffff81287a99>] security_load_policy+0x59/0x480
[<ffffffff8127a831>] sel_write_load+0xa1/0x720
[<ffffffff81180eac>] vfs_write+0xac/0x180
[<ffffffff811811da>] sys_write+0x4a/0x90
[<ffffffff81605029>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffffcommがsystemdなものはほぼこのパターンでした。
まずはkmalloc()の呼び出しを行っているpolicydb_read()から見ていきますか。
メモリリークの場合mallocを呼び出した関数が原因とは限らないですが、最初にチェックする場所として、あとはpolicydb_read()は戻り値はintなのでこの中で完結している可能性もありますしね。違う可能性も当然ありますが。