From: Joshua Hahn <joshua.hahnjy@gmail.com>
To: Harry Yoo <harry.yoo@oracle.com>
Cc: kernel test robot <lkp@intel.com>,
oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>,
Gregory Price <gourry@gourry.net>,
Huang Ying <ying.huang@linux.alibaba.com>,
Honggyu Kim <honggyu.kim@sk.com>
Subject: Re: mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field
Date: Mon, 2 Jun 2025 07:52:39 -0700 [thread overview]
Message-ID: <20250602145240.1868958-1-joshua.hahnjy@gmail.com> (raw)
In-Reply-To: <aD0-JNr0Z83OpXg4@harry>
On Mon, 2 Jun 2025 15:01:08 +0900 Harry Yoo <harry.yoo@oracle.com> wrote:
> On Sun, Jun 01, 2025 at 01:34:46PM +0800, kernel test robot wrote:
> > cocci warnings: (new ones prefixed by >>)
> > >> mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field
> >
> > vim +3719 mm/mempolicy.c
> >
> > 3700
> > 3701 static void wi_state_free(void)
> > 3702 {
> > 3703 struct weighted_interleave_state *old_wi_state;
> > 3704
> > 3705 mutex_lock(&wi_state_lock);
> > 3706
> > 3707 old_wi_state = rcu_dereference_protected(wi_state,
> > 3708 lockdep_is_held(&wi_state_lock));
> > 3709 if (!old_wi_state) {
> > 3710 mutex_unlock(&wi_state_lock);
> > 3711 goto out;
> > 3712 }
> > 3713
> > 3714 rcu_assign_pointer(wi_state, NULL);
> > 3715 mutex_unlock(&wi_state_lock);
> > 3716 synchronize_rcu();
> > 3717 kfree(old_wi_state);
> > 3718 out:
> > > 3719 kfree(&wi_group->wi_kobj);
>
> Hmm maybe Joshua meant kfree(wi_group)?
>
> Anyway, practically it's the same as kfree(wi_group) and something strange
> is happening there.
>
> in add_weighted_interleave_group() (the only caller of wi_cleanup()),
> kobject_del() and kobject_put() are called after wi_cleanup() freed
> wi_group in the error path.
Hi Harry,
Thanks for your suggestion and insight! This is totally a slip-up on my end.
I completely missed the kobject_{put, delete} that gets called immediately
after this, which is embarrassing because rebasing on top of Rakie's patch
(which introduces those proper freeing calls) was the main focus of this v8.
From what I can tell, I think the solution here is to just remove the goto
statement entirely. There is no need to free the wi_group here, and it
would also be bad practice to do more than the function name suggests anyways.
Let me send a patch that gets rid of the goto statement, and just returns if
there is no old_wi_state. While I'm at it, I'll send in a patch from
David Hildenbrand that is an optimization in this area.
Thanks again for taking a look Harry, hope you have a great day!
Joshua
>
> > 3720 }
> > 3721
> >
> > --
> > 0-DAY CI Kernel Test Service
>
> --
> Cheers,
> Harry / Hyeonggon
prev parent reply other threads:[~2025-06-02 14:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-01 5:34 kernel test robot
2025-06-02 6:01 ` Harry Yoo
2025-06-02 14:52 ` Joshua Hahn [this message]
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=20250602145240.1868958-1-joshua.hahnjy@gmail.com \
--to=joshua.hahnjy@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=gourry@gourry.net \
--cc=harry.yoo@oracle.com \
--cc=honggyu.kim@sk.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=ying.huang@linux.alibaba.com \
/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