diff mbox series

[iwl-net,v1] ice: fix memory leak in aRFS after reset

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

Commit Message

Grzegorz Nitka Jan. 23, 2025, 8:15 a.m. UTC
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(-)


base-commit: 3ef16bb459c1a3af2c071cb5651877a47cd03295

Comments

Simon Horman Jan. 31, 2025, 10:12 a.m. UTC | #1
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>
Rinitha, SX Feb. 26, 2025, 6:03 a.m. UTC | #2
> -----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 mbox series

Patch

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),