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 4/8] mm/damon/core: disallow max < min damos filter range arguments commit
Date: Sat, 12 Sep 2026 12:42:04 -0700 [thread overview]
Message-ID: <20260912194206.139467-1-sj@kernel.org> (raw)
In-Reply-To: <20260912192942.AAD411F000FF@smtp.kernel.org>
On Sat, 12 Sep 2026 19:29:42 +0000 sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [High] The newly introduced validation in `damos_commit_filter_arg()` returns `-EINVAL` on failure, but callers `damos_commit_core_filters` and `damos_commit_ops_filters` ignore this return value for new filters, adding uninitialized memory to active DAMON context.
> - [High] `damos_commit_filter()` mutates the target filter's state (type, matching, allow) before validating its arguments, leaving the live filter in a corrupted state if validation subsequently fails.
> --
>
> commit b7aac655c61845e48301bed4669cfcf294cf84cb
> Author: SJ Park <sj@kernel.org>
>
> mm/damon/core: disallow max < min damos filter range arguments commit
>
> This commit adds validation to damos_commit_filter_arg() to reject invalid
> ranges where max is less than min. It returns -EINVAL when an invalid range
> is provided, avoiding duplicated validation across different DAMON API callers.
>
> > diff --git a/mm/damon/core.c b/mm/damon/core.c
> > index 3ad1fb2f21f3f..3dec1a8f7ed3a 100644
> > --- a/mm/damon/core.c
> > +++ b/mm/damon/core.c
> > @@ -1325,15 +1325,21 @@ static int damos_commit_filter_arg(
> > dst->memcg_id = src->memcg_id;
> > break;
> > case DAMOS_FILTER_TYPE_ADDR:
> > + if (src->addr_range.end < src->addr_range.start)
> > + return -EINVAL;
>
> [Severity: High]
> Does this code leave the target filter in a corrupted state on error?
>
> Looking at damos_commit_filter(), the state is mutated before the newly
> introduced validation has a chance to execute:
>
> mm/damon/core.c:damos_commit_filter() {
> dst->type = src->type;
> dst->matching = src->matching;
> dst->allow = src->allow;
> return damos_commit_filter_arg(dst, src);
> }
>
> If damos_commit_filter_arg() returns -EINVAL here, dst->type, dst->matching,
> and dst->allow have already been modified. If an existing ops filter receives
> an invalid range update, its type will be updated but its union arguments will
> belong to the previous type. When the filter executes, it might misinterpret
> the old union memory according to the new type, causing unintended matching
> behavior.
Yes, and the caller will destroy it, so no issue.
>
>
> [Severity: High]
> Can this validation error cause uninitialized memory to be added to the active
> DAMON context?
>
> Looking at damos_commit_core_filters() and damos_commit_ops_filters(), the
> return value of damos_commit_filter_arg() is ignored when creating new filters:
>
> mm/damon/core.c:damos_commit_core_filters() {
> ...
> new_filter = damos_new_filter(
> src_filter->type, src_filter->matching,
> src_filter->allow);
> if (!new_filter)
> return -ENOMEM;
> damos_commit_filter_arg(new_filter, src_filter);
> damos_add_filter(dst, new_filter);
> }
>
> Because damos_new_filter() allocates memory without zero-initializing the union
> arguments, returning -EINVAL from damos_commit_filter_arg() means the union
> payload (like addr_range or sz_range) is left uninitialized. The callers ignore
> this error and add the filter to the system anyway, which could result in
> using kmalloc garbage and triggering undefined matching behavior.
>
> Additionally, damos_commit_ops_filters() ignores the return value of
> damos_commit_filter() for existing ops filters:
>
> mm/damon/core.c:damos_commit_ops_filters() {
> ...
> damos_for_each_ops_filter_safe(dst_filter, next, dst) {
> src_filter = damos_nth_ops_filter(i++, src);
> if (src_filter)
> damos_commit_filter(dst_filter, src_filter);
> ...
>
> If an existing ops filter receives an invalid update, the validation error
> is swallowed entirely.
Good findings, I will fix this in the next spin.
>
> > dst->addr_range = src->addr_range;
> > break;
>
> [ ... ]
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260912191807.138502-1-sj@kernel.org?part=4
Thanks,
SJ
next prev parent reply other threads:[~2026-09-12 19:42 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-12 19:17 [RFC PATCH 0/8] mm/damon: move damos filter range arguments validation to core SJ Park
2026-09-12 19:17 ` [RFC PATCH 1/8] mm/damon/sysfs-schemes: read sysfs_filter->addr_range only once SJ Park
2026-09-12 19:37 ` sashiko-bot
2026-09-12 19:18 ` [RFC PATCH 2/8] mm/damon/sysfs-schemes: read sysfs_filter->sz_range " SJ Park
2026-09-12 19:26 ` sashiko-bot
2026-09-12 19:18 ` [RFC PATCH 3/8] mm/damon/core: return an error from damos_commit_filter_arg() SJ Park
2026-09-12 19:29 ` sashiko-bot
2026-09-12 19:37 ` SJ Park
2026-09-12 19:18 ` [RFC PATCH 4/8] mm/damon/core: disallow max < min damos filter range arguments commit SJ Park
2026-09-12 19:29 ` sashiko-bot
2026-09-12 19:42 ` SJ Park [this message]
2026-09-12 19:18 ` [RFC PATCH 5/8] mm/damon/sysfs-schemes: drop centralized filter range arg validations SJ Park
2026-09-12 19:30 ` sashiko-bot
2026-09-12 19:43 ` SJ Park
2026-09-12 19:18 ` [RFC PATCH 6/8] mm/damon/sysfs-schemes: use switch-case in add_scheme_filters() SJ Park
2026-09-12 19:23 ` sashiko-bot
2026-09-12 19:18 ` [RFC PATCH 7/8] mm/damon/core-kunit: extend damos_commit_filter_for() for wrong input SJ Park
2026-09-12 19:28 ` sashiko-bot
2026-09-12 19:18 ` [RFC PATCH 8/8] mm/damon/core-kunit: test invalid damos filter commits SJ Park
2026-09-12 19:36 ` sashiko-bot
2026-09-12 19:47 ` 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=20260912194206.139467-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox