ACPI: video - fix potential crash when unloading
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 8 Aug 2009 07:26:25 +0000 (00:26 -0700)
committerLen Brown <len.brown@intel.com>
Sun, 30 Aug 2009 02:58:19 +0000 (22:58 -0400)
thermal_cooling_device_register() returns error encoded in a pointer
when it fails in which case we need to explictly set device->cdev
to NULL so we don't try to unregister it when unloading.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Acked-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/video.c

index 2020907..aab3851 100644 (file)
@@ -997,8 +997,18 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
 
                device->cdev = thermal_cooling_device_register("LCD",
                                        device->dev, &video_cooling_ops);
-               if (IS_ERR(device->cdev))
+               if (IS_ERR(device->cdev)) {
+                       /*
+                        * Set cdev to NULL so we don't crash trying to
+                        * free it.
+                        * Also, why the hell we are returning early and
+                        * not attempt to register video output if cooling
+                        * device registration failed?
+                        * -- dtor
+                        */
+                       device->cdev = NULL;
                        return;
+               }
 
                dev_info(&device->dev->dev, "registered as cooling_device%d\n",
                         device->cdev->id);