dell-laptop: fix a use-after-free error on the failure path

dell_setup_rfkill() already cleans up the rfkill devices on failure.
So if it returns an error, we should not try to unregister the rfkill
devices.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Acked-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Alan Jenkins 2009-08-19 15:06:47 +01:00 committed by Len Brown
parent e1fbf346c7
commit 71e9dc73cb

View File

@ -330,7 +330,7 @@ static int __init dell_init(void)
if (ret) { if (ret) {
printk(KERN_WARNING "dell-laptop: Unable to setup rfkill\n"); printk(KERN_WARNING "dell-laptop: Unable to setup rfkill\n");
goto out; goto fail_rfkill;
} }
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
@ -358,7 +358,7 @@ static int __init dell_init(void)
if (IS_ERR(dell_backlight_device)) { if (IS_ERR(dell_backlight_device)) {
ret = PTR_ERR(dell_backlight_device); ret = PTR_ERR(dell_backlight_device);
dell_backlight_device = NULL; dell_backlight_device = NULL;
goto out; goto fail_backlight;
} }
dell_backlight_device->props.max_brightness = max_intensity; dell_backlight_device->props.max_brightness = max_intensity;
@ -368,13 +368,15 @@ static int __init dell_init(void)
} }
return 0; return 0;
out:
fail_backlight:
if (wifi_rfkill) if (wifi_rfkill)
rfkill_unregister(wifi_rfkill); rfkill_unregister(wifi_rfkill);
if (bluetooth_rfkill) if (bluetooth_rfkill)
rfkill_unregister(bluetooth_rfkill); rfkill_unregister(bluetooth_rfkill);
if (wwan_rfkill) if (wwan_rfkill)
rfkill_unregister(wwan_rfkill); rfkill_unregister(wwan_rfkill);
fail_rfkill:
kfree(da_tokens); kfree(da_tokens);
return ret; return ret;
} }