linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field
@ 2025-06-01  5:34 kernel test robot
  2025-06-02  6:01 ` Harry Yoo
  0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2025-06-01  5:34 UTC (permalink / raw)
  To: Joshua Hahn
  Cc: oe-kbuild-all, linux-kernel, Andrew Morton,
	Linux Memory Management List, Gregory Price, Harry Yoo,
	Huang Ying, Honggyu Kim

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   7d4e49a77d9930c69751b9192448fda6ff9100f1
commit: e341f9c3c8412e57fe0042a33a2640245ecdf619 mm/mempolicy: Weighted Interleave Auto-tuning
date:   11 days ago
config: loongarch-randconfig-r054-20250601 (https://download.01.org/0day-ci/archive/20250601/202506011545.Fduxqxqj-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 15.1.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506011545.Fduxqxqj-lkp@intel.com/

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);
  3720	}
  3721	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field
  2025-06-01  5:34 mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field kernel test robot
@ 2025-06-02  6:01 ` Harry Yoo
  2025-06-02 14:52   ` Joshua Hahn
  0 siblings, 1 reply; 3+ messages in thread
From: Harry Yoo @ 2025-06-02  6:01 UTC (permalink / raw)
  To: kernel test robot
  Cc: Joshua Hahn, oe-kbuild-all, linux-kernel, Andrew Morton,
	Linux Memory Management List, Gregory Price, Huang Ying,
	Honggyu Kim

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.

>   3720	}
>   3721	
> 
> -- 
> 0-DAY CI Kernel Test Service

-- 
Cheers,
Harry / Hyeonggon


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field
  2025-06-02  6:01 ` Harry Yoo
@ 2025-06-02 14:52   ` Joshua Hahn
  0 siblings, 0 replies; 3+ messages in thread
From: Joshua Hahn @ 2025-06-02 14:52 UTC (permalink / raw)
  To: Harry Yoo
  Cc: kernel test robot, oe-kbuild-all, linux-kernel, Andrew Morton,
	Linux Memory Management List, Gregory Price, Huang Ying,
	Honggyu Kim

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-06-02 14:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-06-01  5:34 mm/mempolicy.c:3719:1-6: ERROR: invalid free of structure field kernel test robot
2025-06-02  6:01 ` Harry Yoo
2025-06-02 14:52   ` Joshua Hahn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox