From: sashiko-bot@kernel.org
To: "SJ Park" <sj@kernel.org>
Cc: damon@lists.linux.dev
Subject: Re: [RFC PATCH 08/16] mm/damon/core: disable access monitoring when probe weights are set
Date: Sun, 05 Jul 2026 21:19:00 +0000 [thread overview]
Message-ID: <20260705211901.7A5291F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260705205743.98656-9-sj@kernel.org>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] kdamond_merge_regions loop terminates prematurely because max_thres is capped by access count limit, breaking the scaling of threshold for probe hits.
- [High] Silent breakage of vaddr/fvaddr monitoring when probe weights are configured via sysfs.
Pre-existing issues:
- [High] Unbounded integer overflow of probe_hits array elements in struct damon_region.
--
commit 6a6c230b9f6562af956ffa250fd34b615f031ce5
Author: SJ Park <sj@kernel.org>
mm/damon/core: disable access monitoring when probe weights are set
When users set probe weights, they are interested in the data
attributes. Not necessarily they are interested in data access
patterns. Disable the data access monitoring in the case.
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index f6e03746b170e..db4e404f95bd1 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -3670,17 +3670,18 @@ static int kdamond_fn(void *data)
> unsigned long next_aggregation_sis = ctx->next_aggregation_sis;
> unsigned long next_ops_update_sis = ctx->next_ops_update_sis;
> unsigned long sample_interval = ctx->attrs.sample_interval;
> + bool access_check_disabled = damon_has_probe_weights(ctx);
>
> if (kdamond_wait_activation(ctx))
> break;
>
> - if (ctx->ops.prepare_access_checks)
> + if (!access_check_disabled && ctx->ops.prepare_access_checks)
> ctx->ops.prepare_access_checks(ctx);
>
> kdamond_usleep(sample_interval);
> ctx->passed_sample_intervals++;
>
> - if (ctx->ops.check_accesses)
> + if (!access_check_disabled && ctx->ops.check_accesses)
> max_nr_accesses = ctx->ops.check_accesses(ctx);
[Severity: High]
If a user configures a DAMON context with vaddr or fvaddr operations,
and creates a probe via sysfs with a weight, will this bypass check_accesses
without a fallback?
It appears that damon_has_probe_weights() will return true and
access_check_disabled will become true.
This unconditionally bypasses ctx->ops.check_accesses(ctx).
However, if vaddr and fvaddr operations do not currently implement
apply_probes (leaving it NULL), it seems no sampling will occur at all.
Does this silently leave the context without any functional monitoring for
virtual address spaces?
> if (ctx->ops.apply_probes)
> ctx->ops.apply_probes(ctx, false, false);
[Severity: High]
Could this change cause the loop in kdamond_merge_regions() to exit
prematurely when using probe weights?
When probe weights are enabled, kdamond_merge_regions() starts its
region merging loop with an initial threshold scaled by the maximum
probe hit weighted sum.
However, the loop's upper bound cap, max_thres, remains capped by the
maximum possible access counts:
mm/damon/core.c:kdamond_merge_regions() {
...
} while (nr_regions > c->attrs.max_nr_regions &&
threshold / 2 < max_thres);
}
Because a probe hit weighted sum can easily exceed the access-based max_thres
by orders of magnitude, the loop condition can fail on the very first
iteration.
Will this force the loop to exit prematurely without adequately
doubling the threshold, leaving nr_regions exceeding max_nr_regions?
[Severity: High]
This isn't a bug introduced by this patch, but there is an unbounded
integer overflow of the probe_hits array elements in struct damon_region.
Running DAMON with a large aggregation interval relative to the sample
interval can cause the unsigned char probe_hits counter to wrap around.
In damon_pa_apply_probes(), the counter is incremented without bounds
checking:
mm/damon/paddr.c:damon_pa_apply_probes() {
...
if (damon_pa_filter_pass(pa, folio, p))
r->probe_hits[i]++;
...
}
Since probe_hits is defined as an unsigned char (max 255) in
struct damon_region:
include/linux/damon.h {
...
unsigned char probe_hits[DAMON_MAX_PROBES];
...
}
If a region satisfies a probe for more than 255 sampling intervals within
a single aggregation window, the counter will wrap around to 0 multiple
times.
Might this feed arbitrary garbage values to damon_probe_hits_wsum(),
corrupting the metric that region merging and scheme application rely on?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260705205743.98656-1-sj@kernel.org?part=8
next prev parent reply other threads:[~2026-07-05 21:19 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-05 20:57 [RFC PATCH 00/16] mm/damon: introduce data attributes only monitoring SJ Park
2026-07-05 20:57 ` [RFC PATCH 01/16] mm/damon/core: introduce damon_probe->weight SJ Park
2026-07-05 21:04 ` sashiko-bot
2026-07-05 21:21 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 02/16] mm/damon/core: ask apply_probes() ops callback to set sampling address SJ Park
2026-07-05 21:07 ` sashiko-bot
2026-07-05 21:25 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 03/16] mm/damon/paddr: set samples in apply_probes() if requested SJ Park
2026-07-05 21:11 ` sashiko-bot
2026-07-05 21:28 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 04/16] mm/damon/core: ask apply_probe() to return max probe hits weighted sum SJ Park
2026-07-05 20:57 ` [RFC PATCH 05/16] mm/damon/core: implement damon_probe_hits_wsum() SJ Park
2026-07-05 21:13 ` sashiko-bot
2026-07-05 21:30 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 06/16] mm/damon/paddr: respect return_max_wsum SJ Park
2026-07-05 20:57 ` [RFC PATCH 07/16] mm/damon/core: extend merge function to work with probe hits SJ Park
2026-07-05 21:11 ` sashiko-bot
2026-07-05 21:38 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 08/16] mm/damon/core: disable access monitoring when probe weights are set SJ Park
2026-07-05 21:19 ` sashiko-bot [this message]
2026-07-05 20:57 ` [RFC PATCH 09/16] mm/damon/core: set samples in apply_probes() if " SJ Park
2026-07-05 20:57 ` [RFC PATCH 10/16] mm/damon/core: s/max_nr_accesses/max_merge_score/ in kdamond_fn() SJ Park
2026-07-05 20:57 ` [RFC PATCH 11/16] mm/damon/core: get merge threshold from probe hits when weights are set SJ Park
2026-07-05 21:12 ` sashiko-bot
2026-07-05 21:41 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 12/16] mm/damon/core: implement damon_has_probe_weight() SJ Park
2026-07-05 21:15 ` sashiko-bot
2026-07-05 21:45 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 13/16] mm/damon/sysfs: implement probe/weight file SJ Park
2026-07-05 20:57 ` [RFC PATCH 14/16] Docs/mm/damon/design: document attrs-only monitoring SJ Park
2026-07-05 21:05 ` sashiko-bot
2026-07-05 21:46 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 15/16] Docs/admin-guide/mm/damon/usage: document weight sysfs file SJ Park
2026-07-05 21:07 ` sashiko-bot
2026-07-05 21:48 ` SJ Park
2026-07-05 20:57 ` [RFC PATCH 16/16] Docs/ABI/damon: document probe weight file SJ Park
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260705211901.7A5291F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=damon@lists.linux.dev \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox