Commit 1552fd3e authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman Committed by Andrew Morton

mm/damon/dbgfs: fix memory leak when using debugfs_lookup()

When calling debugfs_lookup() the result must have dput() called on it,
otherwise the memory will leak over time.  Fix this up by properly calling
dput().

Link: https://lkml.kernel.org/r/20220902191149.112434-1-sj@kernel.org
Fixes: 75c1c2b5 ("mm/damon/dbgfs: support multiple contexts")
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarSeongJae Park <sj@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent fd35ca3d
...@@ -884,6 +884,7 @@ static int dbgfs_rm_context(char *name) ...@@ -884,6 +884,7 @@ static int dbgfs_rm_context(char *name)
struct dentry *root, *dir, **new_dirs; struct dentry *root, *dir, **new_dirs;
struct damon_ctx **new_ctxs; struct damon_ctx **new_ctxs;
int i, j; int i, j;
int ret = 0;
if (damon_nr_running_ctxs()) if (damon_nr_running_ctxs())
return -EBUSY; return -EBUSY;
...@@ -898,14 +899,16 @@ static int dbgfs_rm_context(char *name) ...@@ -898,14 +899,16 @@ static int dbgfs_rm_context(char *name)
new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs), new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs),
GFP_KERNEL); GFP_KERNEL);
if (!new_dirs) if (!new_dirs) {
return -ENOMEM; ret = -ENOMEM;
goto out_dput;
}
new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs), new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs),
GFP_KERNEL); GFP_KERNEL);
if (!new_ctxs) { if (!new_ctxs) {
kfree(new_dirs); ret = -ENOMEM;
return -ENOMEM; goto out_new_dirs;
} }
for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) { for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) {
...@@ -925,7 +928,13 @@ static int dbgfs_rm_context(char *name) ...@@ -925,7 +928,13 @@ static int dbgfs_rm_context(char *name)
dbgfs_ctxs = new_ctxs; dbgfs_ctxs = new_ctxs;
dbgfs_nr_ctxs--; dbgfs_nr_ctxs--;
return 0; goto out_dput;
out_new_dirs:
kfree(new_dirs);
out_dput:
dput(dir);
return ret;
} }
static ssize_t dbgfs_rm_context_write(struct file *file, static ssize_t dbgfs_rm_context_write(struct file *file,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment