summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorJosh Law <objecting@objecting.org>2026-03-21 10:54:26 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-04-02 13:23:25 +0200
commit3527e9fdc38570cea0f6ddb7a2c9303d4044b217 (patch)
treebb27df06cc72cb7054494b9fc437ce6f1a6629d8 /mm
parent708033c231bd782858f4ddbb46ee874a5a5fbdab (diff)
downloadlinux-3527e9fdc38570cea0f6ddb7a2c9303d4044b217.tar.gz
linux-3527e9fdc38570cea0f6ddb7a2c9303d4044b217.tar.bz2
linux-3527e9fdc38570cea0f6ddb7a2c9303d4044b217.zip
mm/damon/sysfs: check contexts->nr in repeat_call_fn
commit 6557004a8b59c7701e695f02be03c7e20ed1cc15 upstream. damon_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. For example, the issue can be reproduced using DAMON sysfs interface and DAMON user-space tool (damo) [1] like below. $ sudo damo start --refresh_interval 1s $ echo 0 | sudo tee \ /sys/kernel/mm/damon/admin/kdamonds/0/contexts/nr_contexts Link: https://patch.msgid.link/20260320163559.178101-3-objecting@objecting.org Link: https://lkml.kernel.org/r/20260321175427.86000-4-sj@kernel.org Link: https://github.com/damonitor/damo [1] Fixes: d809a7c64ba8 ("mm/damon/sysfs: implement refresh_ms file internal work") Signed-off-by: Josh Law <objecting@objecting.org> Reviewed-by: SeongJae Park <sj@kernel.org> Signed-off-by: SeongJae Park <sj@kernel.org> Cc: <stable@vger.kernel.org> [6.17+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/damon/sysfs.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c
index 28794e191c19..61c7b799bf83 100644
--- a/mm/damon/sysfs.c
+++ b/mm/damon/sysfs.c
@@ -1570,9 +1570,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;
}