Message ID | 20230914114629.1517650-2-ruanjinjie@huawei.com |
---|---|
State | Superseded |
Headers | show |
Series | kunit: Fix some bugs in kunit | expand |
On Thu, Sep 14, 2023 at 7:47 AM 'Jinjie Ruan' via KUnit Development <kunit-dev@googlegroups.com> wrote: > > modprobe cpumask_kunit and rmmod cpumask_kunit, kmemleak detect > a suspected memory leak as below. > > If kunit_filter_suites() in kunit_module_init() succeeds, the > suite_set.start will not be NULL and the kunit_free_suite_set() in > kunit_module_exit() should free all the memory which has not > been freed. However the test_cases in suites is left out. > > unreferenced object 0xffff54ac47e83200 (size 512): > comm "modprobe", pid 592, jiffies 4294913238 (age 1367.612s) > hex dump (first 32 bytes): > 84 13 1a f0 d3 b6 ff ff 30 68 1a f0 d3 b6 ff ff ........0h...... > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace: > [<000000008dec63a2>] slab_post_alloc_hook+0xb8/0x368 > [<00000000ec280d8e>] __kmem_cache_alloc_node+0x174/0x290 > [<00000000896c7740>] __kmalloc+0x60/0x2c0 > [<000000007a50fa06>] kunit_filter_suites+0x254/0x5b8 > [<0000000078cc98e2>] kunit_module_notify+0xf4/0x240 > [<0000000033cea952>] notifier_call_chain+0x98/0x17c > [<00000000973d05cc>] notifier_call_chain_robust+0x4c/0xa4 > [<000000005f95895f>] blocking_notifier_call_chain_robust+0x4c/0x74 > [<0000000048e36fa7>] load_module+0x1a2c/0x1c40 > [<0000000004eb8a91>] init_module_from_file+0x94/0xcc > [<0000000037dbba28>] idempotent_init_module+0x184/0x278 > [<00000000161b75cb>] __arm64_sys_finit_module+0x68/0xa8 > [<000000006dc1669b>] invoke_syscall+0x44/0x100 > [<00000000fa87e304>] el0_svc_common.constprop.1+0x68/0xe0 > [<000000009d8ad866>] do_el0_svc+0x1c/0x28 > [<000000005b83c607>] el0_svc+0x3c/0xc4 > > Fixes: e5857d396f35 ("kunit: flatten kunit_suite*** to kunit_suite** in .kunit_test_suites") > Fixes: b67abaad4d25 ("kunit: Allow kunit test modules to use test filtering") > Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com> Hello! This looks good to me. Reviewed-by: Rae Moar <rmoar@google.com> Thanks! -Rae > --- > lib/kunit/executor.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > index a6348489d45f..a037a46fae5e 100644 > --- a/lib/kunit/executor.c > +++ b/lib/kunit/executor.c > @@ -137,8 +137,10 @@ void kunit_free_suite_set(struct kunit_suite_set suite_set) > { > struct kunit_suite * const *suites; > > - for (suites = suite_set.start; suites < suite_set.end; suites++) > + for (suites = suite_set.start; suites < suite_set.end; suites++) { > + kfree((*suites)->test_cases); > kfree(*suites); > + } > kfree(suite_set.start); > } > > -- > 2.34.1 > > -- > You received this message because you are subscribed to the Google Groups "KUnit Development" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kunit-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kunit-dev/20230914114629.1517650-2-ruanjinjie%40huawei.com.
diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index a6348489d45f..a037a46fae5e 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -137,8 +137,10 @@ void kunit_free_suite_set(struct kunit_suite_set suite_set) { struct kunit_suite * const *suites; - for (suites = suite_set.start; suites < suite_set.end; suites++) + for (suites = suite_set.start; suites < suite_set.end; suites++) { + kfree((*suites)->test_cases); kfree(*suites); + } kfree(suite_set.start); }
modprobe cpumask_kunit and rmmod cpumask_kunit, kmemleak detect a suspected memory leak as below. If kunit_filter_suites() in kunit_module_init() succeeds, the suite_set.start will not be NULL and the kunit_free_suite_set() in kunit_module_exit() should free all the memory which has not been freed. However the test_cases in suites is left out. unreferenced object 0xffff54ac47e83200 (size 512): comm "modprobe", pid 592, jiffies 4294913238 (age 1367.612s) hex dump (first 32 bytes): 84 13 1a f0 d3 b6 ff ff 30 68 1a f0 d3 b6 ff ff ........0h...... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [<000000008dec63a2>] slab_post_alloc_hook+0xb8/0x368 [<00000000ec280d8e>] __kmem_cache_alloc_node+0x174/0x290 [<00000000896c7740>] __kmalloc+0x60/0x2c0 [<000000007a50fa06>] kunit_filter_suites+0x254/0x5b8 [<0000000078cc98e2>] kunit_module_notify+0xf4/0x240 [<0000000033cea952>] notifier_call_chain+0x98/0x17c [<00000000973d05cc>] notifier_call_chain_robust+0x4c/0xa4 [<000000005f95895f>] blocking_notifier_call_chain_robust+0x4c/0x74 [<0000000048e36fa7>] load_module+0x1a2c/0x1c40 [<0000000004eb8a91>] init_module_from_file+0x94/0xcc [<0000000037dbba28>] idempotent_init_module+0x184/0x278 [<00000000161b75cb>] __arm64_sys_finit_module+0x68/0xa8 [<000000006dc1669b>] invoke_syscall+0x44/0x100 [<00000000fa87e304>] el0_svc_common.constprop.1+0x68/0xe0 [<000000009d8ad866>] do_el0_svc+0x1c/0x28 [<000000005b83c607>] el0_svc+0x3c/0xc4 Fixes: e5857d396f35 ("kunit: flatten kunit_suite*** to kunit_suite** in .kunit_test_suites") Fixes: b67abaad4d25 ("kunit: Allow kunit test modules to use test filtering") Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com> --- lib/kunit/executor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)