diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2012-04-04 14:19:16 +0300 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-06-01 13:41:40 -0400 |
commit | 301f33fbcf4ced53b3de114846ecece5d6aafeeb (patch) | |
tree | 2907366f7a1d5612e89a6579a5e7a57a92cfe348 /drivers/acpi/video.c | |
parent | 155689defc782b486a7e6776a57ecc4ebb37ed52 (diff) | |
download | linux-301f33fbcf4ced53b3de114846ecece5d6aafeeb.tar.gz linux-301f33fbcf4ced53b3de114846ecece5d6aafeeb.tar.bz2 linux-301f33fbcf4ced53b3de114846ecece5d6aafeeb.zip |
ACPI video: use after input_unregister_device()
We can't use "input" anymore after calling input_unregister_device().
The call to input_free_device() is a double free. The normal way to
deal with this is to make input_register_device() the last function
called in the function.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/video.c')
-rw-r--r-- | drivers/acpi/video.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 609262dc1258..a576575617d7 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c @@ -1687,10 +1687,6 @@ static int acpi_video_bus_add(struct acpi_device *device) set_bit(KEY_BRIGHTNESS_ZERO, input->keybit); set_bit(KEY_DISPLAY_OFF, input->keybit); - error = input_register_device(input); - if (error) - goto err_stop_video; - printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s rom: %s post: %s)\n", ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device), video->flags.multihead ? "yes" : "no", @@ -1701,12 +1697,16 @@ static int acpi_video_bus_add(struct acpi_device *device) video->pm_nb.priority = 0; error = register_pm_notifier(&video->pm_nb); if (error) - goto err_unregister_input_dev; + goto err_stop_video; + + error = input_register_device(input); + if (error) + goto err_unregister_pm_notifier; return 0; - err_unregister_input_dev: - input_unregister_device(input); + err_unregister_pm_notifier: + unregister_pm_notifier(&video->pm_nb); err_stop_video: acpi_video_bus_stop_devices(video); err_free_input_dev: |