Message ID | 20221112233239.824389-1-nalanzeyu@gmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: ethernet: mtk_eth_soc: fix memory leak in mtk_ppe_init() | expand |
On Sun, Nov 13, 2022 at 07:32:39AM +0800, Yan Cangang wrote: > When dmam_alloc_coherent() or devm_kzalloc() failed, the rhashtable > ppe->l2_flows isn't destroyed. Fix it. ^^^^^ Please fix indentation in commit message. > > Fixes: 33fc42de3327 ("net: ethernet: mtk_eth_soc: support creating mac address based offload entries") > Signed-off-by: Yan Cangang <nalanzeyu@gmail.com> > --- > drivers/net/ethernet/mediatek/mtk_ppe.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.c b/drivers/net/ethernet/mediatek/mtk_ppe.c > index 2d8ca99f2467..8da4c8be59fd 100644 > --- a/drivers/net/ethernet/mediatek/mtk_ppe.c > +++ b/drivers/net/ethernet/mediatek/mtk_ppe.c > @@ -737,7 +737,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, > MTK_PPE_ENTRIES * soc->foe_entry_size, > &ppe->foe_phys, GFP_KERNEL); > if (!foe) > - return NULL; > + goto err_free_l2_flows; > > ppe->foe_table = foe; > > @@ -745,11 +745,15 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, > sizeof(*ppe->foe_flow); > ppe->foe_flow = devm_kzalloc(dev, foe_flow_size, GFP_KERNEL); > if (!ppe->foe_flow) > - return NULL; > + goto err_free_l2_flows; > > mtk_ppe_debugfs_init(ppe, index); > > return ppe; > + > +err_free_l2_flows: > + rhashtable_destroy(&ppe->l2_flows); I expect the same change to be in mtk_mdio_cleanup() too. Thanks > + return NULL; > } > > static void mtk_ppe_init_foe_table(struct mtk_ppe *ppe) > -- > 2.30.2 >
diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.c b/drivers/net/ethernet/mediatek/mtk_ppe.c index 2d8ca99f2467..8da4c8be59fd 100644 --- a/drivers/net/ethernet/mediatek/mtk_ppe.c +++ b/drivers/net/ethernet/mediatek/mtk_ppe.c @@ -737,7 +737,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, MTK_PPE_ENTRIES * soc->foe_entry_size, &ppe->foe_phys, GFP_KERNEL); if (!foe) - return NULL; + goto err_free_l2_flows; ppe->foe_table = foe; @@ -745,11 +745,15 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, sizeof(*ppe->foe_flow); ppe->foe_flow = devm_kzalloc(dev, foe_flow_size, GFP_KERNEL); if (!ppe->foe_flow) - return NULL; + goto err_free_l2_flows; mtk_ppe_debugfs_init(ppe, index); return ppe; + +err_free_l2_flows: + rhashtable_destroy(&ppe->l2_flows); + return NULL; } static void mtk_ppe_init_foe_table(struct mtk_ppe *ppe)
When dmam_alloc_coherent() or devm_kzalloc() failed, the rhashtable ppe->l2_flows isn't destroyed. Fix it. Fixes: 33fc42de3327 ("net: ethernet: mtk_eth_soc: support creating mac address based offload entries") Signed-off-by: Yan Cangang <nalanzeyu@gmail.com> --- drivers/net/ethernet/mediatek/mtk_ppe.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)