mm/damon/sysfs: fix param_ctx leak on damon_sysfs_new_test_ctx() failure
Subsystems (3)
PATCH v2 1/1 mm/damon/sysfs: fix param_ctx leak on damon_sysfs_new_test_ctx() failure
When damon_sysfs_new_test_ctx() fails in damon_sysfs_commit_input(), param_ctx is leaked because the early return skips the cleanup at the out label. Destroy param_ctx before returning.
--- mm/damon/sysfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
mm/damon/sysfs.c +3 -1
@@ -1524,8 +1524,10 @@ static int damon_sysfs_commit_input(void *data)if (IS_ERR (param_ctx))return PTR_ERR (param_ctx); test_ctx =damon_sysfs_new_test_ctx (kdamond->damon_ctx); -if (!test_ctx) +if (!test_ctx) { +damon_destroy_ctx (param_ctx);return -ENOMEM ; + } err =damon_commit_ctx (test_ctx, param_ctx);if (err) goto out;
Signature · 1 line
2.34.1
PATCH v2 1/1 mm/damon/sysfs: check contexts->nr before accessing contexts_arr[0]
Multiple sysfs command paths dereference contexts_arr[0] without first verifying that nr_contexts >= 1. A user can set nr_contexts to 0 via sysfs while DAMON is running, causing NULL pointer dereferences.
Guard all commands (except OFF) at the entry point of damon_sysfs_handle_cmd().
--- mm/damon/sysfs.c | 3 +++ 1 file changed, 3 insertions(+)
mm/damon/sysfs.c +3 -0
@@ -1749,6 +1749,9 @@ static int damon_sysfs_update_schemes_tried_regions(static int damon_sysfs_handle_cmd (enum damon_sysfs_cmd cmd,struct damon_sysfs_kdamond *kdamond) { +if (cmd !=DAMON_SYSFS_CMD_OFF && kdamond->contexts->nr !=1 ) +return -EINVAL ; +switch (cmd) {case DAMON_SYSFS_CMD_ON :return damon_sysfs_turn_damon_on (kdamond);
Signature · 1 line
2.34.1
PATCH v2 1/1 mm/damon/sysfs: check contexts->nr in repeat_call_fn
In reply to Josh Lawdamon_sysfs_repeat_call_fn() calls damon_sysfs_upd_tuned_intervals(), damon_sysfs_upd_schemes_stats(), and damon_sysfs_upd_schemes_effective_quotas() without checking contexts->nr. If nr_contexts is set to 0 via sysfs while DAMON is running, these functions dereference contexts_arr[0] and cause a NULL pointer dereference. Add the missing check.
--- mm/damon/sysfs.c | 3 +++ 1 file changed, 3 insertions(+)
mm/damon/sysfs.c +3 -0
@@ -1620,9 +1620,12 @@ static int damon_sysfs_repeat_call_fn(void *data)if (!mutex_trylock (&damon_sysfs_lock))return 0 ; +if (sysfs_kdamond->contexts->nr !=1 ) + goto out;damon_sysfs_upd_tuned_intervals (sysfs_kdamond);damon_sysfs_upd_schemes_stats (sysfs_kdamond);damon_sysfs_upd_schemes_effective_quotas (sysfs_kdamond); +out:mutex_unlock (&damon_sysfs_lock);return 0 ; }
Signature · 1 line
2.34.1
SeongJae Park
maintainerApparently this series is only by a mistake, and therefore a new version [1] is posted. So I will skip this series and review the new version. Let me know if anything is wrong.
[1] https://lore.kernel.org/[email protected]
Thanks,
SJ
[...]
Quoted 11 lines · SeongJae Park
Apparently this series is only by a mistake, and therefore a new version [1] is posted. So I will skip this series and review the new version. Let me know if anything is wrong.
[1] https://lore.kernel.org/[email protected]
Thanks,
SJ[...]
Only the numbering was wrong, like no 1/3 2/3 etc. Im a bit of a perferctionist so i nitpicked it
V/R
Josh Law