From: SJ Park <sj@kernel.org>
To: sashiko-bot@kernel.org
Cc: SJ Park <sj@kernel.org>, damon@lists.linux.dev
Subject: Re: [RFC PATCH v2 07/17] mm/damon/core: introduce damon_operations->prep_probes()
Date: Sun, 26 Jul 2026 11:52:49 -0700 [thread overview]
Message-ID: <20260726185251.2021-1-sj@kernel.org> (raw)
In-Reply-To: <20260726175701.89E4D1F000E9@smtp.kernel.org>
On Sun, 26 Jul 2026 17:57:00 +0000 sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
> - [High] TOCTOU race in `kdamond_fn` across blocking wait leads to NULL pointer dereference of `ctx->ops.prep_probes`.
> - [Medium] Silent bypass of preparation actions when unsupported by operations set.
> - [Low] API Contract Omission: `prep_probes` documentation fails to specify the requirement to set `sampling_addr`.
> --
>
> --- Patch [7]: [RFC PATCH v2 07/17] mm/damon/core: introduce damon_operations->prep_probes() ---
> commit f3f60f13684ba2645da0754240dfe010fa41b859
> Author: SJ Park <sj@kernel.org>
>
> mm/damon/core: introduce damon_operations->prep_probes()
>
> damon_prep needs to be executed by the underlying DAMON operation set.
> Extend the operation set callback list for the execution of damon_prep
> actions. If the underlying operation set implements the callback, DAMON
> core executes it in the monitoring preparation time.
>
> > diff --git a/include/linux/damon.h b/include/linux/damon.h
> > index 24b362fcf53b1..fe2c6b56d1d53 100644
> > --- a/include/linux/damon.h
> > +++ b/include/linux/damon.h
> [ ... ]
> > @@ -654,6 +655,8 @@ enum damon_ops_id {
> > * last preparation and update the number of observed accesses of each region.
> > * It should also return max number of observed accesses that made as a result
> > * of its update. The value will be used for regions adjustment threshold.
> > + * @prep_probes should execute required &struct damon_prep for next &struct
> > + * damon_probe applications to each region.
>
> [Severity: Low]
> Does this documentation need to specify that @prep_probes is responsible
> for setting the sampling_addr?
>
> Looking at kdamond_fn(), when do_prep and access_check_disabled are both
> true, apply_probes() receives false for its set_samples parameter:
>
> kdamond_fn() {
> ...
> if (do_prep)
> ctx->ops.prep_probes(ctx, access_check_disabled);
> ...
> max_wsum = ctx->ops.apply_probes(ctx,
> access_check_disabled && !do_prep,
> get_max_wsum);
> ...
> }
>
> This seems to leave prep_probes as the only callback receiving true for
> set_samples, making it solely responsible for setting sampling_addr.
Nice suggestion, I will do, like below.
'''
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -714,7 +714,8 @@ enum damon_ops_id {
* It should also return max number of observed accesses that made as a result
* of its update. The value will be used for regions adjustment threshold.
* @prep_probes should execute required &struct damon_prep for next &struct
- * damon_probe applications to each region.
+ * damon_probe applications to each region. It should also set
+ * &damon_region->sampling_addr of each region if ``set_samples`` is true.
* @apply_probes should apply the data attribute probes to each region and
* accordingly update the probe hits counter of the region. It should also
* set &damon_region->sampling_addr of each region if ``set_samples`` is true.
'''
>
> > * @apply_probes should apply the data attribute probes to each region and
> > * accordingly update the probe hits counter of the region. It should also
> > * set &damon_region->sampling_addr of each region if ``set_samples`` is true.
> [ ... ]
> > diff --git a/mm/damon/core.c b/mm/damon/core.c
> > index 127d3a7c27280..7ea42983d1276 100644
> > --- a/mm/damon/core.c
> > +++ b/mm/damon/core.c
> [ ... ]
> > @@ -3878,6 +3891,8 @@ static int kdamond_fn(void *data)
> >
> > if (!access_check_disabled && ctx->ops.prepare_access_checks)
> > ctx->ops.prepare_access_checks(ctx);
>
> [Severity: High]
> Could the context's operations set change during kdamond_wait_activation()
> (called just before this), resulting in a NULL pointer dereference here?
>
> The do_prep flag is cached before calling kdamond_wait_activation().
>
> If the wait blocks, a user could update the context's operations to one that
> does not implement prep_probes (via kdamond_call() from a sysfs commit),
> making ctx->ops.prep_probes NULL.
>
> When execution resumes, it would use the stale do_prep = true value and
> attempt to call the now-NULL ctx->ops.prep_probes(...).
Good finding! I will move do_prep setup to be done after
kdamond_wait_activation().
>
> [Severity: Medium]
> Also, does this silently ignore user-configured preparation actions?
>
> If a user configures a probe with preparation actions, but the current
> operations set doesn't implement prep_probes, do_prep evaluates to false.
>
> It appears the preparation actions are silently bypassed during execution
> without returning an error during context commit, such as in
> __damon_commit_ctx().
>
> This could leave the user unaware that their configured actions are not
> being applied.
That's the intended behavior.
>
> > + if (do_prep)
> > + ctx->ops.prep_probes(ctx, access_check_disabled);
> >
> > kdamond_usleep(sample_interval);
> > ctx->passed_sample_intervals++;
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260726173935.94046-1-sj@kernel.org?part=7
Thanks,
SJ
next prev parent reply other threads:[~2026-07-26 18:52 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-26 17:39 [RFC PATCH v2 00/17] mm/damon: introduce data access-as-a-data attribute SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 01/17] mm/damon/core: introduce DAMON_FILTER_TYPE_PGIDLE_UNSET SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 02/17] mm/damon/paddr: support PGIDLE_UNSET probe filter type SJ Park
2026-07-26 17:53 ` sashiko-bot
2026-07-26 18:42 ` SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 03/17] mm/damon/sysfs: support pgidle_unset " SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 04/17] Docs/mm/damon/design: document " SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 05/17] mm/damon/core: introduce damon_prep struct SJ Park
2026-07-26 17:52 ` sashiko-bot
2026-07-26 18:45 ` SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 06/17] mm/damon/core: commit preps SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 07/17] mm/damon/core: introduce damon_operations->prep_probes() SJ Park
2026-07-26 17:57 ` sashiko-bot
2026-07-26 18:52 ` SJ Park [this message]
2026-07-26 17:39 ` [RFC PATCH v2 08/17] mm/damon/paddr: support damon_prep SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 09/17] mm/damon/sysfs: implement preps directory SJ Park
2026-07-26 17:46 ` sashiko-bot
2026-07-26 18:54 ` SJ Park
2026-07-26 19:41 ` SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 10/17] mm/damon/sysfs: create probe " SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 11/17] mm/damon/sysfs: implement probe prep directory SJ Park
2026-07-26 17:47 ` sashiko-bot
2026-07-26 18:57 ` SJ Park
2026-07-26 19:42 ` SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 12/17] mm/damon/sysfs: create probe prep files for preps/nr file write SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 13/17] mm/damon/sysfs: pass preps to DAMON core SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 14/17] selftests/damon/sysfs.sh: test probe prep sysfs files SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 15/17] Docs/mm/damon/design: document probe preps SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 16/17] Docs/admin-guide/mm/damon/usage: document probe preps sysfs files SJ Park
2026-07-26 17:45 ` sashiko-bot
2026-07-26 18:58 ` SJ Park
2026-07-26 17:39 ` [RFC PATCH v2 17/17] Docs/ABI/damon: document probe prep " SJ Park
2026-07-26 17:45 ` sashiko-bot
2026-07-26 19:01 ` 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=20260726185251.2021-1-sj@kernel.org \
--to=sj@kernel.org \
--cc=damon@lists.linux.dev \
--cc=sashiko-bot@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 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.