HID: nvidia-shield: Remove led_classdev_unregister in thunderstrike_create
authorRahul Rameshbabu <rrameshbabu@nvidia.com>
Mon, 7 Aug 2023 16:36:18 +0000 (09:36 -0700)
committerJiri Kosina <jkosina@suse.cz>
Mon, 14 Aug 2023 09:41:17 +0000 (11:41 +0200)
Avoid calling thunderstrike_led_set_brightness from thunderstrike_create
when led_classdev_unregister is called. led_classdev_unregister was called
from thunderstrike_create in the error path. Calling
thunderstrike_led_set_brightness in this situation is unsafe.

Fixes: f88af60e74a5 ("HID: nvidia-shield: Support LED functionality for Thunderstrike")
Signed-off-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-nvidia-shield.c

index a928ad2be62dbe21c8fc2f01be18ff9a7bc7d488..4e183650c447890897b6cd1bef5086a0103f0881 100644 (file)
@@ -513,21 +513,22 @@ static struct shield_device *thunderstrike_create(struct hid_device *hdev)
 
        hid_set_drvdata(hdev, shield_dev);
 
+       ts->haptics_dev = shield_haptics_create(shield_dev, thunderstrike_play_effect);
+       if (IS_ERR(ts->haptics_dev))
+               return ERR_CAST(ts->haptics_dev);
+
        ret = thunderstrike_led_create(ts);
        if (ret) {
                hid_err(hdev, "Failed to create Thunderstrike LED instance\n");
-               return ERR_PTR(ret);
-       }
-
-       ts->haptics_dev = shield_haptics_create(shield_dev, thunderstrike_play_effect);
-       if (IS_ERR(ts->haptics_dev))
                goto err;
+       }
 
        hid_info(hdev, "Registered Thunderstrike controller\n");
        return shield_dev;
 
 err:
-       led_classdev_unregister(&ts->led_dev);
+       if (ts->haptics_dev)
+               input_unregister_device(ts->haptics_dev);
        return ERR_CAST(ts->haptics_dev);
 }