diff options
author | Jia-Ju Bai <baijiaju1990@163.com> | 2016-03-11 12:14:37 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2016-03-23 11:51:31 -0400 |
commit | 372f7d6ac11235a69b2cb356cdc8bf67bd68f4c4 (patch) | |
tree | 2ea97c0809a44ee15c254543791305bb125330ee | |
parent | 9a3492194eca6253ae7ba93c7a402cecad7f1c94 (diff) |
b43: Fix memory leaks in b43_bus_dev_ssb_init and b43_bus_dev_bcma_init
The memory allocated by kzalloc in b43_bus_dev_ssb_init and
b43_bus_dev_bcma_init is not freed.
This patch fixes the bug by adding kfree in b43_ssb_remove,
b43_bcma_remove and error handling code of b43_bcma_probe.
Thanks Michael for his suggestion.
Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com>
Acked-by: Michael Büsch <m@bues.ch>
Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r-- | drivers/net/wireless/broadcom/b43/main.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c index 72380af9dc52..b0603e796ad8 100644 --- a/drivers/net/wireless/broadcom/b43/main.c +++ b/drivers/net/wireless/broadcom/b43/main.c | |||
@@ -5680,11 +5680,12 @@ static int b43_bcma_probe(struct bcma_device *core) | |||
5680 | INIT_WORK(&wl->firmware_load, b43_request_firmware); | 5680 | INIT_WORK(&wl->firmware_load, b43_request_firmware); |
5681 | schedule_work(&wl->firmware_load); | 5681 | schedule_work(&wl->firmware_load); |
5682 | 5682 | ||
5683 | bcma_out: | ||
5684 | return err; | 5683 | return err; |
5685 | 5684 | ||
5686 | bcma_err_wireless_exit: | 5685 | bcma_err_wireless_exit: |
5687 | ieee80211_free_hw(wl->hw); | 5686 | ieee80211_free_hw(wl->hw); |
5687 | bcma_out: | ||
5688 | kfree(dev); | ||
5688 | return err; | 5689 | return err; |
5689 | } | 5690 | } |
5690 | 5691 | ||
@@ -5712,8 +5713,8 @@ static void b43_bcma_remove(struct bcma_device *core) | |||
5712 | b43_rng_exit(wl); | 5713 | b43_rng_exit(wl); |
5713 | 5714 | ||
5714 | b43_leds_unregister(wl); | 5715 | b43_leds_unregister(wl); |
5715 | |||
5716 | ieee80211_free_hw(wl->hw); | 5716 | ieee80211_free_hw(wl->hw); |
5717 | kfree(wldev->dev); | ||
5717 | } | 5718 | } |
5718 | 5719 | ||
5719 | static struct bcma_driver b43_bcma_driver = { | 5720 | static struct bcma_driver b43_bcma_driver = { |
@@ -5796,6 +5797,7 @@ static void b43_ssb_remove(struct ssb_device *sdev) | |||
5796 | 5797 | ||
5797 | b43_leds_unregister(wl); | 5798 | b43_leds_unregister(wl); |
5798 | b43_wireless_exit(dev, wl); | 5799 | b43_wireless_exit(dev, wl); |
5800 | kfree(dev); | ||
5799 | } | 5801 | } |
5800 | 5802 | ||
5801 | static struct ssb_driver b43_ssb_driver = { | 5803 | static struct ssb_driver b43_ssb_driver = { |