| From 398c4312135876d396a6e1112fd164a29a304885 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 15 Jun 2020 11:25:33 +0800 |
| Subject: dlm: Fix kobject memleak |
| |
| From: Wang Hai <wanghai38@huawei.com> |
| |
| [ Upstream commit 0ffddafc3a3970ef7013696e7f36b3d378bc4c16 ] |
| |
| Currently the error return path from kobject_init_and_add() is not |
| followed by a call to kobject_put() - which means we are leaking |
| the kobject. |
| |
| Set do_unreg = 1 before kobject_init_and_add() to ensure that |
| kobject_put() can be called in its error patch. |
| |
| Fixes: 901195ed7f4b ("Kobject: change GFS2 to use kobject_init_and_add") |
| Reported-by: Hulk Robot <hulkci@huawei.com> |
| Signed-off-by: Wang Hai <wanghai38@huawei.com> |
| Signed-off-by: David Teigland <teigland@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/dlm/lockspace.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c |
| index afb8340918b86..c689359ca532b 100644 |
| --- a/fs/dlm/lockspace.c |
| +++ b/fs/dlm/lockspace.c |
| @@ -632,6 +632,9 @@ static int new_lockspace(const char *name, const char *cluster, |
| wait_event(ls->ls_recover_lock_wait, |
| test_bit(LSFL_RECOVER_LOCK, &ls->ls_flags)); |
| |
| + /* let kobject handle freeing of ls if there's an error */ |
| + do_unreg = 1; |
| + |
| ls->ls_kobj.kset = dlm_kset; |
| error = kobject_init_and_add(&ls->ls_kobj, &dlm_ktype, NULL, |
| "%s", ls->ls_name); |
| @@ -639,9 +642,6 @@ static int new_lockspace(const char *name, const char *cluster, |
| goto out_recoverd; |
| kobject_uevent(&ls->ls_kobj, KOBJ_ADD); |
| |
| - /* let kobject handle freeing of ls if there's an error */ |
| - do_unreg = 1; |
| - |
| /* This uevent triggers dlm_controld in userspace to add us to the |
| group of nodes that are members of this lockspace (managed by the |
| cluster infrastructure.) Once it's done that, it tells us who the |
| -- |
| 2.25.1 |
| |