| From 36e4709154c704cd9677d6586ef216d72c28d566 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 6 Jul 2020 10:39:35 +0200 |
| Subject: smsc95xx: avoid memory leak in smsc95xx_bind |
| |
| From: Andre Edich <andre.edich@microchip.com> |
| |
| [ Upstream commit 3ed58f96a70b85ef646d5427258f677f1395b62f ] |
| |
| In a case where the ID_REV register read is failed, the memory for a |
| private data structure has to be freed before returning error from the |
| function smsc95xx_bind. |
| |
| Fixes: bbd9f9ee69242 ("smsc95xx: add wol support for more frame types") |
| Signed-off-by: Andre Edich <andre.edich@microchip.com> |
| Signed-off-by: Parthiban Veerasooran <Parthiban.Veerasooran@microchip.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/usb/smsc95xx.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c |
| index eb404bb74e18e..bb4ccbda031ab 100644 |
| --- a/drivers/net/usb/smsc95xx.c |
| +++ b/drivers/net/usb/smsc95xx.c |
| @@ -1293,7 +1293,8 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) |
| /* detect device revision as different features may be available */ |
| ret = smsc95xx_read_reg(dev, ID_REV, &val); |
| if (ret < 0) |
| - return ret; |
| + goto free_pdata; |
| + |
| val >>= 16; |
| pdata->chip_id = val; |
| pdata->mdix_ctrl = get_mdix_status(dev->net); |
| -- |
| 2.25.1 |
| |