| From b3dc7525022eac058272c2c7693f9a45f2a8b14d Mon Sep 17 00:00:00 2001 |
| From: Wen Yang <wen.yang99@zte.com.cn> |
| Date: Fri, 22 Mar 2019 11:04:09 +0800 |
| Subject: net: ethernet: ti: fix possible object reference leak |
| |
| [ Upstream commit 75eac7b5f68b0a0671e795ac636457ee27cc11d8 ] |
| |
| The call to of_get_child_by_name returns a node pointer with refcount |
| incremented thus it must be explicitly decremented after the last |
| usage. |
| |
| Detected by coccinelle with the following warnings: |
| ./drivers/net/ethernet/ti/netcp_ethss.c:3661:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 3654, but without a corresponding object release within this function. |
| ./drivers/net/ethernet/ti/netcp_ethss.c:3665:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 3654, but without a corresponding object release within this function. |
| |
| Signed-off-by: Wen Yang <wen.yang99@zte.com.cn> |
| Cc: Wingman Kwok <w-kwok2@ti.com> |
| Cc: Murali Karicheri <m-karicheri2@ti.com> |
| Cc: "David S. Miller" <davem@davemloft.net> |
| Cc: netdev@vger.kernel.org |
| Cc: linux-kernel@vger.kernel.org |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/ti/netcp_ethss.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c |
| index 28cb38af1a34..ff7a71ca0b13 100644 |
| --- a/drivers/net/ethernet/ti/netcp_ethss.c |
| +++ b/drivers/net/ethernet/ti/netcp_ethss.c |
| @@ -3538,12 +3538,16 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev, |
| |
| ret = netcp_txpipe_init(&gbe_dev->tx_pipe, netcp_device, |
| gbe_dev->dma_chan_name, gbe_dev->tx_queue_id); |
| - if (ret) |
| + if (ret) { |
| + of_node_put(interfaces); |
| return ret; |
| + } |
| |
| ret = netcp_txpipe_open(&gbe_dev->tx_pipe); |
| - if (ret) |
| + if (ret) { |
| + of_node_put(interfaces); |
| return ret; |
| + } |
| |
| /* Create network interfaces */ |
| INIT_LIST_HEAD(&gbe_dev->gbe_intf_head); |
| -- |
| 2.19.1 |
| |