diff --git a/mm/damon/core.c b/mm/damon/core.c index 4ab1ed472fbc..70ac1f08753d 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -213,12 +213,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, min_sz_region) >= - ALIGN(ranges[i].end, min_sz_region)) + unsigned long start, end; + + start = ALIGN_DOWN(ranges[i].start, min_sz_region); + end = ALIGN(ranges[i].end, min_sz_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 */