Joseph Qi
2022-Nov-01 11:15 UTC
[Ocfs2-devel] [PATCH] ocfs2: Fix memory leak in ocfs2_stack_glue_init()
On 11/1/22 2:47 PM, Shang XiaoJing wrote:> ocfs2_table_header should be free in ocfs2_stack_glue_init() if > ocfs2_sysfs_init() failed, otherwise kmemleak will report memleak. > > BUG: memory leak > unreferenced object 0xffff88810eeb5800 (size 128): > comm "modprobe", pid 4507, jiffies 4296182506 (age 55.888s) > hex dump (first 32 bytes): > c0 40 14 a0 ff ff ff ff 00 00 00 00 01 00 00 00 . at .............. > 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace: > [<000000001e59e1cd>] __register_sysctl_table+0xca/0xef0 > [<00000000c04f70f7>] 0xffffffffa0050037 > [<000000001bd12912>] do_one_initcall+0xdb/0x480 > [<0000000064f766c9>] do_init_module+0x1cf/0x680 > [<000000002ba52db0>] load_module+0x6441/0x6f20 > [<000000009772580d>] __do_sys_finit_module+0x12f/0x1c0 > [<00000000380c1f22>] do_syscall_64+0x3f/0x90 > [<000000004cf473bc>] entry_SYSCALL_64_after_hwframe+0x63/0xcd > > Fixes: 3878f110f71a ("ocfs2: Move the hb_ctl_path sysctl into the stack glue.") > Signed-off-by: Shang XiaoJing <shangxiaojing at huawei.com>Looks good. Reviewed-by: Joseph Qi <joseph.qi at linux.alibaba.com>> --- > fs/ocfs2/stackglue.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/fs/ocfs2/stackglue.c b/fs/ocfs2/stackglue.c > index 317126261523..a8d5ca98fa57 100644 > --- a/fs/ocfs2/stackglue.c > +++ b/fs/ocfs2/stackglue.c > @@ -669,6 +669,8 @@ static struct ctl_table_header *ocfs2_table_header; > > static int __init ocfs2_stack_glue_init(void) > { > + int ret; > + > strcpy(cluster_stack_name, OCFS2_STACK_PLUGIN_O2CB); > > ocfs2_table_header = register_sysctl("fs/ocfs2/nm", ocfs2_nm_table); > @@ -678,7 +680,11 @@ static int __init ocfs2_stack_glue_init(void) > return -ENOMEM; /* or something. */ > } > > - return ocfs2_sysfs_init(); > + ret = ocfs2_sysfs_init(); > + if (ret) > + unregister_sysctl_table(ocfs2_table_header); > + > + return ret; > } > > static void __exit ocfs2_stack_glue_exit(void)