Problem ======= The 'addr_unit' must be a power of 2 for correct address alignment calculations. Previously, writing a non-power-of-2 value (e.g., addr_unit=3) would be accepted by the sysfs store callback, but cause kdamond to exit unexpectedly during parameter application, failing silently without returning an error to userspace. Solution ======== Add an is_power_of_2() check in damon_commit_ctx() to reject invalid inputs immediately with -EINVAL. When damon_commit_ctx() fails, the kdamond thread terminates as designed. The issue is found by sashiko [1]. [1] https://lore.kernel.org/20260325025317.86571-1-sj@kernel.org Signed-off-by: Liew Rui Yan --- mm/damon/core.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index db6c67e52d2b..6bad85a47a79 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1330,6 +1330,8 @@ int damon_commit_ctx(struct damon_ctx *dst, struct damon_ctx *src) dst->maybe_corrupted = true; if (!is_power_of_2(src->min_region_sz)) return -EINVAL; + if (!src->addr_unit || !is_power_of_2(src->addr_unit)) + return -EINVAL; err = damon_commit_schemes(dst, src); if (err) -- 2.53.0