diff options
author | Jia-Ju Bai <baijiaju1990@gmail.com> | 2019-05-04 12:10:00 +0300 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2019-05-28 15:43:34 +0300 |
commit | ec2e93cf1910d4517bb68cd67f2925665c5ef005 (patch) | |
tree | b365fc138a6ad3d07f804e3036b68fe8b270930d /drivers/net/wireless/broadcom/b43 | |
parent | aeffda6b10f8d4cf1c5bb10eac30a7a47f7ce184 (diff) | |
download | linux-ec2e93cf1910d4517bb68cd67f2925665c5ef005.tar.xz |
b43: Avoid possible double calls to b43_one_core_detach()
In b43_request_firmware(), when ieee80211_register_hw() fails,
b43_one_core_detach() is called. In b43_bcma_remove() and
b43_ssb_remove(), b43_one_core_detach() is called again. In this case,
null-pointer dereferences and double-free problems can occur when
the driver is removed.
To fix this bug, the call to b43_one_core_detach() in
b43_request_firmware() is deleted.
This bug is found by a runtime fuzzing tool named FIZZER written by us.
Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/broadcom/b43')
-rw-r--r-- | drivers/net/wireless/broadcom/b43/main.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c index 20815a71680b..b85603e91c7a 100644 --- a/drivers/net/wireless/broadcom/b43/main.c +++ b/drivers/net/wireless/broadcom/b43/main.c @@ -2590,18 +2590,13 @@ start_ieee80211: err = ieee80211_register_hw(wl->hw); if (err) - goto err_one_core_detach; + goto out; wl->hw_registered = true; b43_leds_register(wl->current_dev); /* Register HW RNG driver */ b43_rng_init(wl); - goto out; - -err_one_core_detach: - b43_one_core_detach(dev->dev); - out: kfree(ctx); } |