b43: Fix rfkill allocation leakage in error paths
PATCH 1/1 b43: Fix rfkill allocation leakage in error paths
We must kill rfkill in any error paths that trigger after rfkill init.
Signed-off-by Michael Buesch <[email protected]>
---
John, please try to push this for 2.6.24. Seems quite important, as it leaks resources and might crash the kernel.
drivers/net/wireless/b43/main.c +8 -1
@@ -3626,38 +3626,45 @@ static void b43_op_remove_interface(strustatic int b43_op_start (struct ieee80211_hw *hw) {struct b43_wl *wl =hw_to_b43_wl (hw);struct b43_wldev *dev = wl->current_dev;int did_init =0 ;int err =0 ; +bool do_rfkill_exit =0 ;/* First register RFkill. * LEDs that are registered later depend on it. */ b43_rfkill_init (dev);mutex_lock (&wl->mutex);if (b43_status (dev) <B43_STAT_INITIALIZED ) { err =b43_wireless_core_init (dev); -if (err) +if (err) { + do_rfkill_exit =1 ; goto out_mutex_unlock; + } did_init =1 ; }if (b43_status (dev) <B43_STAT_STARTED ) { err =b43_wireless_core_start (dev);if (err) {if (did_init)b43_wireless_core_exit (dev); + do_rfkill_exit =1 ; goto out_mutex_unlock; } } out_mutex_unlock:mutex_unlock (&wl->mutex); +if (do_rfkill_exit) +b43_rfkill_exit (dev); +return err; }static void b43_op_stop (struct ieee80211_hw *hw) {struct b43_wl *wl =hw_to_b43_wl (hw);