The current implementation allows having zero size regions with no special reasons, but damon_get_intervals_score() gets crashed by divide by zero when the region size is zero.
[ 29.403950] Oops: divide error: 0000 [#1] SMP NOPTI
This patch fixes the bug, but does not disallow zero size regions to keep the backward compatibility since disallowing zero size regions might be a breaking change for some users.
In addition, the same crash can happen when intervals_goal.access_bp is zero so this should be fixed in stable trees as well.
Fixes: f04b0fedbe71 ("mm/damon/core: implement intervals auto-tuning") Signed-off-by: Honggyu Kim honggyu.kim@sk.com Cc: stable@vger.kernel.org --- mm/damon/core.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/mm/damon/core.c b/mm/damon/core.c index b217e0120e09..2a6b8d1c2c9e 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1449,6 +1449,7 @@ static unsigned long damon_get_intervals_score(struct damon_ctx *c) } } target_access_events = max_access_events * goal_bp / 10000; + target_access_events = target_access_events ? : 1; return access_events * 10000 / target_access_events; }
Hello Honggyu,
On Wed, 2 Jul 2025 09:02:04 +0900 Honggyu Kim honggyu.kim@sk.com wrote:
The current implementation allows having zero size regions with no special reasons, but damon_get_intervals_score() gets crashed by divide by zero when the region size is zero.
[ 29.403950] Oops: divide error: 0000 [#1] SMP NOPTI
This patch fixes the bug, but does not disallow zero size regions to keep the backward compatibility since disallowing zero size regions might be a breaking change for some users.
In addition, the same crash can happen when intervals_goal.access_bp is zero so this should be fixed in stable trees as well.
Thank you for this fix!
Fixes: f04b0fedbe71 ("mm/damon/core: implement intervals auto-tuning") Signed-off-by: Honggyu Kim honggyu.kim@sk.com Cc: stable@vger.kernel.org
Reviewed-by: SeongJae Park sj@kernel.org
Thanks, SJ
[...]
linux-stable-mirror@lists.linaro.org