aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorAnssi Hannula <anssi.hannula@iki.fi>2011-02-20 13:07:24 -0500
committerMatthew Garrett <mjg@redhat.com>2011-03-28 06:07:18 -0400
commit6d97db590ca2787c202cf35e76f5d24b3007bc7c (patch)
treef94034daa9f0ae2969e3fabebd2601622f5eb9a5 /drivers/platform
parenteceb7bdf644b418175aab1c998137e692ac98a4c (diff)
hp-wmi: clear rfkill device pointers when appropriate
NULLify rfkill pointers during initialization. This prevents dereference of invalid pointer in case the driver is rebound and some rfkill device isn't detected anymore. Clear them also in hp_wmi_rfkill_setup failure path so that an rfkill initialization failure doesn't need to be fatal for the whole driver. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi> Signed-off-by: Matthew Garrett <mjg@redhat.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/hp-wmi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
index f6a1c37af9cc..45b2bbe6d835 100644
--- a/drivers/platform/x86/hp-wmi.c
+++ b/drivers/platform/x86/hp-wmi.c
@@ -587,14 +587,17 @@ static int __devinit hp_wmi_rfkill_setup(struct platform_device *device)
587 return 0; 587 return 0;
588register_wwan_err: 588register_wwan_err:
589 rfkill_destroy(wwan_rfkill); 589 rfkill_destroy(wwan_rfkill);
590 wwan_rfkill = NULL;
590 if (bluetooth_rfkill) 591 if (bluetooth_rfkill)
591 rfkill_unregister(bluetooth_rfkill); 592 rfkill_unregister(bluetooth_rfkill);
592register_bluetooth_error: 593register_bluetooth_error:
593 rfkill_destroy(bluetooth_rfkill); 594 rfkill_destroy(bluetooth_rfkill);
595 bluetooth_rfkill = NULL;
594 if (wifi_rfkill) 596 if (wifi_rfkill)
595 rfkill_unregister(wifi_rfkill); 597 rfkill_unregister(wifi_rfkill);
596register_wifi_error: 598register_wifi_error:
597 rfkill_destroy(wifi_rfkill); 599 rfkill_destroy(wifi_rfkill);
600 wifi_rfkill = NULL;
598 return err; 601 return err;
599} 602}
600 603
@@ -602,6 +605,11 @@ static int __devinit hp_wmi_bios_setup(struct platform_device *device)
602{ 605{
603 int err; 606 int err;
604 607
608 /* clear detected rfkill devices */
609 wifi_rfkill = NULL;
610 bluetooth_rfkill = NULL;
611 wwan_rfkill = NULL;
612
605 err = hp_wmi_rfkill_setup(device); 613 err = hp_wmi_rfkill_setup(device);
606 if (err) 614 if (err)
607 return err; 615 return err;