Message ID | 20250123081539.1814685-1-grzegorz.nitka@intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | [iwl-net,v1] ice: fix memory leak in aRFS after reset | expand |
On Thu, Jan 23, 2025 at 09:15:39AM +0100, Grzegorz Nitka wrote: > Fix aRFS (accelerated Receive Flow Steering) structures memory leak by > adding a checker to verify if aRFS memory is already allocated while > configuring VSI. aRFS objects are allocated in two cases: > - as part of VSI initialization (at probe), and > - as part of reset handling > > However, VSI reconfiguration executed during reset involves memory > allocation one more time, without prior releasing already allocated > resources. This led to the memory leak with the following signature: > > [root@os-delivery ~]# cat /sys/kernel/debug/kmemleak > unreferenced object 0xff3c1ca7252e6000 (size 8192): > comm "kworker/0:0", pid 8, jiffies 4296833052 > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace (crc 0): > [<ffffffff991ec485>] __kmalloc_cache_noprof+0x275/0x340 > [<ffffffffc0a6e06a>] ice_init_arfs+0x3a/0xe0 [ice] > [<ffffffffc09f1027>] ice_vsi_cfg_def+0x607/0x850 [ice] > [<ffffffffc09f244b>] ice_vsi_setup+0x5b/0x130 [ice] > [<ffffffffc09c2131>] ice_init+0x1c1/0x460 [ice] > [<ffffffffc09c64af>] ice_probe+0x2af/0x520 [ice] > [<ffffffff994fbcd3>] local_pci_probe+0x43/0xa0 > [<ffffffff98f07103>] work_for_cpu_fn+0x13/0x20 > [<ffffffff98f0b6d9>] process_one_work+0x179/0x390 > [<ffffffff98f0c1e9>] worker_thread+0x239/0x340 > [<ffffffff98f14abc>] kthread+0xcc/0x100 > [<ffffffff98e45a6d>] ret_from_fork+0x2d/0x50 > [<ffffffff98e083ba>] ret_from_fork_asm+0x1a/0x30 > ... > > Fixes: 28bf26724fdb ("ice: Implement aRFS") > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com> Reviewed-by: Simon Horman <horms@kernel.org>
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Grzegorz Nitka > Sent: 23 January 2025 13:46 > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Subject: [Intel-wired-lan] [PATCH iwl-net v1] ice: fix memory leak in aRFS after reset > > Fix aRFS (accelerated Receive Flow Steering) structures memory leak by adding a checker to verify if aRFS memory is already allocated while configuring VSI. aRFS objects are allocated in two cases: > - as part of VSI initialization (at probe), and > - as part of reset handling > > However, VSI reconfiguration executed during reset involves memory allocation one more time, without prior releasing already allocated resources. This led to the memory leak with the following signature: > > [root@os-delivery ~]# cat /sys/kernel/debug/kmemleak unreferenced object 0xff3c1ca7252e6000 (size 8192): > comm "kworker/0:0", pid 8, jiffies 4296833052 > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace (crc 0): > [<ffffffff991ec485>] __kmalloc_cache_noprof+0x275/0x340 > [<ffffffffc0a6e06a>] ice_init_arfs+0x3a/0xe0 [ice] > [<ffffffffc09f1027>] ice_vsi_cfg_def+0x607/0x850 [ice] > [<ffffffffc09f244b>] ice_vsi_setup+0x5b/0x130 [ice] > [<ffffffffc09c2131>] ice_init+0x1c1/0x460 [ice] > [<ffffffffc09c64af>] ice_probe+0x2af/0x520 [ice] > [<ffffffff994fbcd3>] local_pci_probe+0x43/0xa0 > [<ffffffff98f07103>] work_for_cpu_fn+0x13/0x20 > [<ffffffff98f0b6d9>] process_one_work+0x179/0x390 > [<ffffffff98f0c1e9>] worker_thread+0x239/0x340 > [<ffffffff98f14abc>] kthread+0xcc/0x100 > [<ffffffff98e45a6d>] ret_from_fork+0x2d/0x50 > [<ffffffff98e083ba>] ret_from_fork_asm+0x1a/0x30 > ... > > Fixes: 28bf26724fdb ("ice: Implement aRFS") > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com> > --- > drivers/net/ethernet/intel/ice/ice_arfs.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
diff --git a/drivers/net/ethernet/intel/ice/ice_arfs.c b/drivers/net/ethernet/intel/ice/ice_arfs.c index 7cee365cc7d1..405ddd17de1b 100644 --- a/drivers/net/ethernet/intel/ice/ice_arfs.c +++ b/drivers/net/ethernet/intel/ice/ice_arfs.c @@ -511,7 +511,7 @@ void ice_init_arfs(struct ice_vsi *vsi) struct hlist_head *arfs_fltr_list; unsigned int i; - if (!vsi || vsi->type != ICE_VSI_PF) + if (!vsi || vsi->type != ICE_VSI_PF || ice_is_arfs_active(vsi)) return; arfs_fltr_list = kcalloc(ICE_MAX_ARFS_LIST, sizeof(*arfs_fltr_list),