]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm/damon/core: fix commit_ops_filters by using correct nth function
authorSang-Heon Jeon <ekffu200098@gmail.com>
Sun, 10 Aug 2025 12:42:01 +0000 (21:42 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:34:34 +0000 (16:34 +0200)
commit 63f5dec16760f2cd7d3f9034d18fc1fa0d83652f upstream.

damos_commit_ops_filters() incorrectly uses damos_nth_filter() which
iterates core_filters.  As a result, performing a commit unintentionally
corrupts ops_filters.

Add damos_nth_ops_filter() which iterates ops_filters.  Use this function
to fix issues caused by wrong iteration.

Link: https://lkml.kernel.org/r/20250810124201.15743-1-ekffu200098@gmail.com
Fixes: 3607cc590f18 ("mm/damon/core: support committing ops_filters") # 6.15.x
Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
Reviewed-by: SeongJae Park <sj@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/damon/core.c

index d9c4a93b24509ca9745b6d13c9f992aa30fbcbcd..d1a37e66b8ab48068c89fe55edf04bdf98b440f2 100644 (file)
@@ -843,6 +843,18 @@ static struct damos_filter *damos_nth_filter(int n, struct damos *s)
        return NULL;
 }
 
+static struct damos_filter *damos_nth_ops_filter(int n, struct damos *s)
+{
+       struct damos_filter *filter;
+       int i = 0;
+
+       damos_for_each_ops_filter(filter, s) {
+               if (i++ == n)
+                       return filter;
+       }
+       return NULL;
+}
+
 static void damos_commit_filter_arg(
                struct damos_filter *dst, struct damos_filter *src)
 {
@@ -906,7 +918,7 @@ static int damos_commit_ops_filters(struct damos *dst, struct damos *src)
        int i = 0, j = 0;
 
        damos_for_each_ops_filter_safe(dst_filter, next, dst) {
-               src_filter = damos_nth_filter(i++, src);
+               src_filter = damos_nth_ops_filter(i++, src);
                if (src_filter)
                        damos_commit_filter(dst_filter, src_filter);
                else