]> git.itanic.dy.fi Git - linux-stable/commitdiff
staging: greybus: fix get_channel_from_mode() failure path
authorDan Carpenter <dan.carpenter@linaro.org>
Mon, 4 Mar 2024 07:04:48 +0000 (10:04 +0300)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:17:30 +0000 (18:17 -0400)
[ Upstream commit 34164202a5827f60a203ca9acaf2d9f7d432aac8 ]

The get_channel_from_mode() function is supposed to return the channel
which matches the mode.  But it has a bug where if it doesn't find a
matching channel then it returns the last channel.  It should return
NULL instead.

Also remove an unnecessary NULL check on "channel".

Fixes: 2870b52bae4c ("greybus: lights: add lights implementation")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Rui Miguel Silva <rmfrfs@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Link: https://lore.kernel.org/r/379c0cb4-39e0-4293-8a18-c7b1298e5420@moroto.mountain
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/staging/greybus/light.c

index 87d36948c610675bc09f01542930eb5f98f7acd4..c6bd86a5335ab52d6331262c20a28b7f94b9e9d1 100644 (file)
@@ -100,15 +100,15 @@ static struct led_classdev *get_channel_cdev(struct gb_channel *channel)
 static struct gb_channel *get_channel_from_mode(struct gb_light *light,
                                                u32 mode)
 {
-       struct gb_channel *channel = NULL;
+       struct gb_channel *channel;
        int i;
 
        for (i = 0; i < light->channels_count; i++) {
                channel = &light->channels[i];
-               if (channel && channel->mode == mode)
-                       break;
+               if (channel->mode == mode)
+                       return channel;
        }
-       return channel;
+       return NULL;
 }
 
 static int __gb_lights_flash_intensity_set(struct gb_channel *channel,