Message ID | 20190723222809.9752-1-navid.emamdoost@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | stmmac_dt_phy: null check the allocation | expand |
From: Navid Emamdoost <navid.emamdoost@gmail.com> Date: Tue, 23 Jul 2019 17:28:09 -0500 > @@ -342,10 +342,13 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat, > mdio = true; > } > > - if (mdio) > + if (mdio) { > plat->mdio_bus_data = > devm_kzalloc(dev, sizeof(struct stmmac_mdio_bus_data), > GFP_KERNEL); > + if (!plat->mdio_bus_data) > + return -ENOMEM; This leaks a reference to plat->mdio_node() which is acquired in the for_each_child_of_node() loop right before the context here. This is what I really fear about these automated patches, it is quite often the case that acquired resources are subtly acquired in nearby code and not released by the proposed "fix". Therefore, either we end up with a regression, or as is the case here a reviewer invests more time into double checking your patch than you put into writing the patch in the first place.
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index 73fc2524372e..392f8d9539c1 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c @@ -342,10 +342,13 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat, mdio = true; } - if (mdio) + if (mdio) { plat->mdio_bus_data = devm_kzalloc(dev, sizeof(struct stmmac_mdio_bus_data), GFP_KERNEL); + if (!plat->mdio_bus_data) + return -ENOMEM; + } return 0; }
devm_kzalloc may fail and return NULL. So the null check is needed. Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com> --- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)