| From 6f6455a5a56dfb721f556368f6bd38c96393c60b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 12 May 2021 22:58:30 +0200 |
| Subject: brcmsmac: mac80211_if: Fix a resource leak in an error handling path |
| |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| |
| [ Upstream commit 9a25344d5177c2b9285532236dc3d10a091f39a8 ] |
| |
| If 'brcms_attach()' fails, we must undo the previous 'ieee80211_alloc_hw()' |
| as already done in the remove function. |
| |
| Fixes: 5b435de0d786 ("net: wireless: add brcm80211 drivers") |
| Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Link: https://lore.kernel.org/r/8fbc171a1a493b38db5a6f0873c6021fca026a6c.1620852921.git.christophe.jaillet@wanadoo.fr |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c |
| index 818e523f6025..fb76b4a69a05 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c |
| @@ -1221,6 +1221,7 @@ static int brcms_bcma_probe(struct bcma_device *pdev) |
| { |
| struct brcms_info *wl; |
| struct ieee80211_hw *hw; |
| + int ret; |
| |
| dev_info(&pdev->dev, "mfg %x core %x rev %d class %d irq %d\n", |
| pdev->id.manuf, pdev->id.id, pdev->id.rev, pdev->id.class, |
| @@ -1245,11 +1246,16 @@ static int brcms_bcma_probe(struct bcma_device *pdev) |
| wl = brcms_attach(pdev); |
| if (!wl) { |
| pr_err("%s: brcms_attach failed!\n", __func__); |
| - return -ENODEV; |
| + ret = -ENODEV; |
| + goto err_free_ieee80211; |
| } |
| brcms_led_register(wl); |
| |
| return 0; |
| + |
| +err_free_ieee80211: |
| + ieee80211_free_hw(hw); |
| + return ret; |
| } |
| |
| static int brcms_suspend(struct bcma_device *pdev) |
| -- |
| 2.30.2 |
| |