greybus: light: fix incorrect led attribute files allocation
authorDavid Lin <dtwlin@google.com>
Mon, 22 Aug 2016 22:51:11 +0000 (15:51 -0700)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 26 Aug 2016 11:16:11 +0000 (13:16 +0200)
Fix incorrect attribute size when the channel supports fader, as well as
fixing the issue that the attribute list is not null terminated.

Testing Done:
 - Verified by setting brightness and color on red/green/blue leds
   of the device class test board.

Signed-off-by: David Lin <dtwlin@google.com>
Reviewed-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/light.c

index a57d59339bd6f12febed76152c29e5b40ac4385d..85bf5559f6fb89cdda97a7ac54ee129c02f99d0a 100644 (file)
@@ -293,13 +293,14 @@ static int channel_attr_groups_set(struct gb_channel *channel,
        if (channel->flags & GB_LIGHT_CHANNEL_MULTICOLOR)
                size++;
        if (channel->flags & GB_LIGHT_CHANNEL_FADER)
-               size++;
+               size += 2;
 
        if (!size)
                return 0;
 
        /* Set attributes based in the channel flags */
-       channel->attrs = kcalloc(size, sizeof(**channel->attrs), GFP_KERNEL);
+       channel->attrs = kcalloc(size + 1, sizeof(**channel->attrs),
+                                GFP_KERNEL);
        if (!channel->attrs)
                return -ENOMEM;
        channel->attr_group = kcalloc(1, sizeof(*channel->attr_group),