All of lore.kernel.org
 help / color / mirror / Atom feed
From: SeongJae Park <sj@kernel.org>
To: sashiko-bot@kernel.org
Cc: SeongJae Park <sj@kernel.org>, damon@lists.linux.dev
Subject: Re: [RFC PATCH 1/9] mm/damon/sysfs: kobject_del() target, context and kdamond dirs
Date: Tue, 16 Jun 2026 17:02:08 -0700	[thread overview]
Message-ID: <20260617000209.91653-1-sj@kernel.org> (raw)
In-Reply-To: <20260616152553.C97A01F000E9@smtp.kernel.org>

On Tue, 16 Jun 2026 15:25:52 +0000 sashiko-bot@kernel.org wrote:

> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> 
> Pre-existing issues:
> - [High] Incomplete fix: Missing kobject_del() in sysfs directory creation error paths leads to persistent -EEXIST collisions.
> --
> 
> commit 1c0329e17860c383f4ab90a119f917db75ecacee
> Author: SeongJae Park <sj@kernel.org>
> 
> mm/damon/sysfs: kobject_del() target, context and kdamond dirs
> 
> On CONFIG_DEBUG_KOBJECT_RELEASE enabled kernel, lack of kobject_del()
> could cause directories creation failures due to the name conflicts.
> Fix those issues for target, context and kdamond directories by adding
> kobject_del() calls.
> 
> Fixes: c951cd3b8901 ("mm/damon: implement a minimal stub for sysfs-based DAMON interface")
> Cc: <stable@vger.kernel.org> # 5.18.x
> 
> > diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c
> > index 2e95e3bac774d..d93f7919c3ca1 100644
> > --- a/mm/damon/sysfs.c
> > +++ b/mm/damon/sysfs.c
> > @@ -333,6 +333,7 @@ static void damon_sysfs_targets_rm_dirs(struct damon_sysfs_targets *targets)
> >  
> >  	for (i = 0; i < targets->nr; i++) {
> >  		damon_sysfs_target_rm_dirs(targets_arr[i]);
> > +		kobject_del(&targets_arr[i]->kobj);
> 
> [Severity: High]
> This isn't a regression introduced by this patch, but while you are fixing
> the -EEXIST name collisions in the rm_dirs() paths, are the same
> kobject_del() calls also needed in the error paths of the corresponding
> add_dirs() functions?
> 
> For example, in damon_sysfs_targets_add_dirs():
> 
>     mm/damon/sysfs.c:damon_sysfs_targets_add_dirs() {
>         ...
>             err = kobject_init_and_add(&target->kobj, ...);
>             if (err)
>                 goto out;
> 
>             err = damon_sysfs_target_add_dirs(target);
>             if (err)
>                 goto out;
>         ...
>     out:
>         damon_sysfs_targets_rm_dirs(targets);
>         kobject_put(&target->kobj);
>         return err;
>     }
> 
> If damon_sysfs_target_add_dirs() fails, kobject_put() is called without
> kobject_del(). Does this result in a lingering directory and a persistent
> -EEXIST if the user retries?
> 
> Similarly, in mm/damon/sysfs-schemes.c:damos_sysfs_populate_region_dir():
> 
>     mm/damon/sysfs-schemes.c:damos_sysfs_populate_region_dir() {
>         ...
>         if (kobject_init_and_add(&region->kobj,
>                     &damon_sysfs_scheme_region_ktype,
>                     &sysfs_regions->kobj, "%d",
>                     sysfs_regions->nr_regions))
>             goto out;
>         if (damos_sysfs_region_add_dirs(region, ctx, r))
>             goto out;
>         ...
>         sysfs_regions->nr_regions++;
>         return;
> 
>     out:
>         kobject_put(&region->kobj);
>     }
> 
> If this fails, it returns without incrementing sysfs_regions->nr_regions.
> Could the next region processed in the loop then attempt to initialize with
> the exact same name string, immediately hitting -EEXIST and breaking the
> entire region population loop?

Good finding.  I will fix this in the next revision, like below:

'''
--- a/mm/damon/sysfs.c
+++ b/mm/damon/sysfs.c
@@ -374,13 +374,15 @@ static int damon_sysfs_targets_add_dirs(struct damon_sysfs_targets *targets,

                err = damon_sysfs_target_add_dirs(target);
                if (err)
-                       goto out;
+                       goto del_out;

                targets_arr[i] = target;
                targets->nr++;
        }
        return 0;

+del_out:
+       kobject_del(&target->kobj);
 out:
        damon_sysfs_targets_rm_dirs(targets);
        kobject_put(&target->kobj);
'''


Thanks,
SJ

[...]

  reply	other threads:[~2026-06-17  0:02 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-16 15:08 [RFC PATCH 0/9] mm/damon/sysfs: kobject_del() directories that users can create/remove SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 1/9] mm/damon/sysfs: kobject_del() target, context and kdamond dirs SeongJae Park
2026-06-16 15:25   ` sashiko-bot
2026-06-17  0:02     ` SeongJae Park [this message]
2026-06-16 15:08 ` [RFC PATCH 2/9] mm/damon/sysfs: kobject_del() region dirs SeongJae Park
2026-06-16 15:29   ` sashiko-bot
2026-06-17  0:18     ` SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 3/9] mm/damon/sysfs-schemes: kobject_del() scheme dirs SeongJae Park
2026-06-16 15:27   ` sashiko-bot
2026-06-17  0:52     ` SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 4/9] mm/damon/sysfs-schemes: kobject_del() scheme region dirs SeongJae Park
2026-06-16 15:25   ` sashiko-bot
2026-06-17  0:43     ` SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 5/9] mm/damon/sysfs-schemes: kobject_del() scheme filter dirs SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 6/9] mm/damon/sysfs-schemes: kobject_del() scheme quota goal dirs SeongJae Park
2026-06-16 15:27   ` sashiko-bot
2026-06-17  0:55     ` SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 7/9] mm/damon/sysfs-schemes: kobject_del() scheme action destination dirs SeongJae Park
2026-06-16 15:34   ` sashiko-bot
2026-06-17  1:07     ` SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 8/9] mm/damon/sysfs: kobject_del() probe filter dirs SeongJae Park
2026-06-16 15:27   ` sashiko-bot
2026-06-17  1:10     ` SeongJae Park
2026-06-16 15:08 ` [RFC PATCH 9/9] mm/damon/sysfs: kobject_del() probe dirs SeongJae Park
2026-06-16 15:24   ` sashiko-bot
2026-06-17  1:11     ` SeongJae Park
2026-06-17  1:15 ` [RFC PATCH 0/9] mm/damon/sysfs: kobject_del() directories that users can create/remove SeongJae 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=20260617000209.91653-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.