aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut+renesas@gmail.com>2020-03-15 15:57:14 +0100
committermarex <marex@desktop.lan>2020-05-01 12:35:21 +0200
commit9741795408d2fb907256899cd9403dd57b917358 (patch)
tree28cef670332ed29a8ec5e893c26f727cbcd8f44b /drivers
parent6f6cf0083f466c49c97c175b0169a0cd31c35d63 (diff)
downloadu-boot-9741795408d2fb907256899cd9403dd57b917358.zip
u-boot-9741795408d2fb907256899cd9403dd57b917358.tar.gz
u-boot-9741795408d2fb907256899cd9403dd57b917358.tar.bz2
net: smc911x: Fix potential memleak() in init fail path
Fix memleak in the init fail path, where if allocation or registration of MDIO bus fails, then ethernet interface is not unregistered and the private data are not freed, yet the probe function reports a failure. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> Cc: Joe Hershberger <joe.hershberger@ni.com> Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/smc911x.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index ceb4f81..4459da5 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -282,15 +282,23 @@ int smc911x_initialize(u8 dev_num, int base_addr)
#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
int retval;
struct mii_dev *mdiodev = mdio_alloc();
- if (!mdiodev)
+ if (!mdiodev) {
+ eth_unregister(dev);
+ free(dev);
return -ENOMEM;
+ }
+
strncpy(mdiodev->name, dev->name, MDIO_NAME_LEN);
mdiodev->read = smc911x_miiphy_read;
mdiodev->write = smc911x_miiphy_write;
retval = mdio_register(mdiodev);
- if (retval < 0)
+ if (retval < 0) {
+ mdio_free(mdiodev);
+ eth_unregister(dev);
+ free(dev);
return retval;
+ }
#endif
return 1;