]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
leds/led-class: Add missing put_device()
authorRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Fri, 31 Jul 2015 11:36:21 +0000 (13:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Oct 2015 21:43:14 +0000 (14:43 -0700)
commit e5b5a61fcb3743f1dacf9e20d28f48423cecf0c1 upstream.

Devices found by class_find_device must be freed with put_device().
Otherwise the reference count will not work properly.

Fixes: a96aa64cb572 ("leds/led-class: Handle LEDs with the same name")
Reported-by: Alan Tull <delicious.quinoa@gmail.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/leds/led-class.c

index 7fb2a19ac649c55906f96f17eb2a9e988658260e..557f8a53a062cbd4bdea1151a9ac068c785ffec2 100644 (file)
@@ -223,12 +223,15 @@ static int led_classdev_next_name(const char *init_name, char *name,
 {
        unsigned int i = 0;
        int ret = 0;
+       struct device *dev;
 
        strlcpy(name, init_name, len);
 
-       while (class_find_device(leds_class, NULL, name, match_name) &&
-              (ret < len))
+       while ((ret < len) &&
+              (dev = class_find_device(leds_class, NULL, name, match_name))) {
+               put_device(dev);
                ret = snprintf(name, len, "%s_%u", init_name, ++i);
+       }
 
        if (ret >= len)
                return -ENOMEM;