All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 6.1.y] mm/damon/core: disallow overlapping input ranges for damon_set_regions()
       [not found] <2026072945-freezable-opossum-1bd2@gregkh>
@ 2026-07-30  1:20 ` SJ Park
  2026-07-31  2:39   ` Sasha Levin
  0 siblings, 1 reply; 2+ messages in thread
From: SJ Park @ 2026-07-30  1:20 UTC (permalink / raw)
  To: stable; +Cc: damon, SJ Park, Andrew Morton

damon_set_regions() assumes the input ranges are sorted by the address and
don't overlap each other.  Hence the assumption was initially to be
explicitly validated.  But commit 97d482f4592f ("mm/damon/sysfs: reuse
damon_set_regions() for regions setting") has mistakenly removed the
validation.

This can make DAMON behave in unexpected ways.  At the best, the
monitoring results snapshot will just look weird since there will be
overlapping regions.  DAMOS will also work weirdly, applying the same
action multiple times for overlapping regions, and make DAMOS quota weird.
More seriously, depending on the setup and regions updates sequence,
negative size regions can be made.  It will trigger WARN_ONCE() if the
kernel is built with CONFIG_DAMON_DEBUG_SANITY=y.  Depending on the
monitoring results, the negative size region can further trigger division
by zero in damon_merge_two_regions().

Note that some of the consequences including the WARN_ONCE() and the
divide by zero depend on commits that were introduced after the root cause
commit 97d482f4592f ("mm/damon/sysfs: reuse damon_set_regions() for
regions setting").

Fix the problems by checking the assumption and returning an error if
the input ranges don't meet the assumption.

The issue was discovered [1] by Sashiko.

Link: https://lore.kernel.org/20260703165610.92894-1-sj@kernel.org
Link: https://lore.kernel.org/20260630041806.151124-1-sj@kernel.org [1]
Fixes: 97d482f4592f ("mm/damon/sysfs: reuse damon_set_regions() for regions setting")
Signed-off-by: SJ Park <sj@kernel.org>
Cc: <stable@vger.kernel.org> # 5.19.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
(cherry picked from commit 954157679ec34661c2e87e7eb796104a797c32db)
Signed-off-by: SJ Park <sj@kernel.org>
---
NOTE: This should be applied after
https://lore.kernel.org/20260730010151.119009-1-sj@kernel.org

 mm/damon/core.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/mm/damon/core.c b/mm/damon/core.c
index 0a0bb033f28a4..dd4eafe8b9611 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -210,12 +210,19 @@ int damon_set_regions(struct damon_target *t, struct damon_addr_range *ranges,
 {
 	struct damon_region *r, *next;
 	unsigned int i;
+	unsigned long last_end;
 	int err;
 
 	for (i = 0; i < nr_ranges; i++) {
-		if (ALIGN_DOWN(ranges[i].start, DAMON_MIN_REGION) >=
-				ALIGN(ranges[i].end, DAMON_MIN_REGION))
+		unsigned long start, end;
+
+		start = ALIGN_DOWN(ranges[i].start, DAMON_MIN_REGION);
+		end = ALIGN(ranges[i].end, DAMON_MIN_REGION);
+		if (start >= end)
+			return -EINVAL;
+		if (i > 0 && last_end > start)
 			return -EINVAL;
+		last_end = end;
 	}
 
 	/* Remove regions which are not in the new ranges */
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 6.1.y] mm/damon/core: disallow overlapping input ranges for damon_set_regions()
  2026-07-30  1:20 ` [PATCH 6.1.y] mm/damon/core: disallow overlapping input ranges for damon_set_regions() SJ Park
@ 2026-07-31  2:39   ` Sasha Levin
  0 siblings, 0 replies; 2+ messages in thread
From: Sasha Levin @ 2026-07-31  2:39 UTC (permalink / raw)
  To: stable; +Cc: Sasha Levin, damon, SJ Park, Andrew Morton

On Wed, Jul 29, 2026 at 06:20:58PM -0700, SJ Park wrote:
>Fix the problems by checking the assumption and returning an error if
>the input ranges don't meet the assumption.

Queued for 6.1, thanks. Applied after the range validation patch, as
you noted.

-- 
Thanks,
Sasha

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-07-31  2:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <2026072945-freezable-opossum-1bd2@gregkh>
2026-07-30  1:20 ` [PATCH 6.1.y] mm/damon/core: disallow overlapping input ranges for damon_set_regions() SJ Park
2026-07-31  2:39   ` Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.