| From c2a7d832aa3e871b378263c2993d7df9c4d0f646 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 19 Aug 2020 00:22:41 +0530 |
| Subject: net: gianfar: Add of_node_put() before goto statement |
| |
| From: Sumera Priyadarsini <sylphrenadin@gmail.com> |
| |
| [ Upstream commit 989e4da042ca4a56bbaca9223d1a93639ad11e17 ] |
| |
| Every iteration of for_each_available_child_of_node() decrements |
| reference count of the previous node, however when control |
| is transferred from the middle of the loop, as in the case of |
| a return or break or goto, there is no decrement thus ultimately |
| resulting in a memory leak. |
| |
| Fix a potential memory leak in gianfar.c by inserting of_node_put() |
| before the goto statement. |
| |
| Issue found with Coccinelle. |
| |
| Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/freescale/gianfar.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c |
| index b665d27f8e299..95ab44aa0eeab 100644 |
| --- a/drivers/net/ethernet/freescale/gianfar.c |
| +++ b/drivers/net/ethernet/freescale/gianfar.c |
| @@ -844,8 +844,10 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev) |
| continue; |
| |
| err = gfar_parse_group(child, priv, model); |
| - if (err) |
| + if (err) { |
| + of_node_put(child); |
| goto err_grp_init; |
| + } |
| } |
| } else { /* SQ_SG_MODE */ |
| err = gfar_parse_group(np, priv, model); |
| -- |
| 2.25.1 |
| |