mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
wilc1000: fix double free error in probe()
[ Upstream commit4894edacfa] Smatch complains that there is a double free in probe: drivers/net/wireless/microchip/wilc1000/spi.c:186 wilc_bus_probe() error: double free of 'spi_priv' drivers/net/wireless/microchip/wilc1000/sdio.c:163 wilc_sdio_probe() error: double free of 'sdio_priv' The problem is that wilc_netdev_cleanup() function frees "wilc->bus_data". That's confusing and a layering violation. Leave the frees in probe(), delete the free in wilc_netdev_cleanup(), and add some new frees to the remove() functions. Fixes:dc8b338f3b("wilc1000: use goto labels on error path") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20211217150311.GC16611@kili Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1a25b9c4ce
commit
b14e931c38
@@ -901,7 +901,6 @@ void wilc_netdev_cleanup(struct wilc *wilc)
|
||||
|
||||
wilc_wlan_cfg_deinit(wilc);
|
||||
wlan_deinit_locks(wilc);
|
||||
kfree(wilc->bus_data);
|
||||
wiphy_unregister(wilc->wiphy);
|
||||
wiphy_free(wilc->wiphy);
|
||||
}
|
||||
|
||||
@@ -167,9 +167,11 @@ free:
|
||||
static void wilc_sdio_remove(struct sdio_func *func)
|
||||
{
|
||||
struct wilc *wilc = sdio_get_drvdata(func);
|
||||
struct wilc_sdio *sdio_priv = wilc->bus_data;
|
||||
|
||||
clk_disable_unprepare(wilc->rtc_clk);
|
||||
wilc_netdev_cleanup(wilc);
|
||||
kfree(sdio_priv);
|
||||
}
|
||||
|
||||
static int wilc_sdio_reset(struct wilc *wilc)
|
||||
|
||||
@@ -182,9 +182,11 @@ free:
|
||||
static int wilc_bus_remove(struct spi_device *spi)
|
||||
{
|
||||
struct wilc *wilc = spi_get_drvdata(spi);
|
||||
struct wilc_spi *spi_priv = wilc->bus_data;
|
||||
|
||||
clk_disable_unprepare(wilc->rtc_clk);
|
||||
wilc_netdev_cleanup(wilc);
|
||||
kfree(spi_priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user