]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mm/damon/core: disallow non-power of two min_region_sz on damon_start()
authorSeongJae Park <sj@kernel.org>
Sat, 11 Apr 2026 21:36:36 +0000 (14:36 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 19 Apr 2026 06:24:27 +0000 (23:24 -0700)
Commit d8f867fa0825 ("mm/damon: add damon_ctx->min_sz_region") introduced
a bug that allows unaligned DAMON region address ranges.  Commit
c80f46ac228b ("mm/damon/core: disallow non-power of two min_region_sz")
fixed it, but only for damon_commit_ctx() use case.  Still, DAMON sysfs
interface can emit non-power of two min_region_sz via damon_start().  Fix
the path by adding the is_power_of_2() check on damon_start().

The issue was discovered by sashiko [1].

Link: https://lore.kernel.org/20260411213638.77768-1-sj@kernel.org
Link: https://lore.kernel.org/20260403155530.64647-1-sj@kernel.org
Fixes: d8f867fa0825 ("mm/damon: add damon_ctx->min_sz_region")
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: <stable@vger.kernel.org> # 6.18.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/core.c

index 3703f62a876b38ba3f846dc634df41cca99d4c10..c107d74c77e7494f87dca599712118bd12164cb8 100644 (file)
@@ -1368,6 +1368,11 @@ int damon_start(struct damon_ctx **ctxs, int nr_ctxs, bool exclusive)
        int i;
        int err = 0;
 
+       for (i = 0; i < nr_ctxs; i++) {
+               if (!is_power_of_2(ctxs[i]->min_region_sz))
+                       return -EINVAL;
+       }
+
        mutex_lock(&damon_lock);
        if ((exclusive && nr_running_ctxs) ||
                        (!exclusive && running_exclusive_ctxs)) {