| From fd1db5962075558ea9742319b51e27b33d55e52b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 6 Apr 2021 21:11:59 +0800 |
| Subject: leds: tlc591xx: fix return value check in tlc591xx_probe() |
| |
| From: Yang Yingliang <yangyingliang@huawei.com> |
| |
| [ Upstream commit ee522bcf026ec82ada793979c3a906274430595a ] |
| |
| After device_get_match_data(), tlc591xx is not checked, add |
| check for it and also check np after dev_of_node. |
| |
| Reported-by: Hulk Robot <hulkci@huawei.com> |
| Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> |
| Signed-off-by: Pavel Machek <pavel@ucw.cz> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/leds/leds-tlc591xx.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/leds/leds-tlc591xx.c b/drivers/leds/leds-tlc591xx.c |
| index 5b9dfdf743ec..cb7bd1353f9f 100644 |
| --- a/drivers/leds/leds-tlc591xx.c |
| +++ b/drivers/leds/leds-tlc591xx.c |
| @@ -148,16 +148,20 @@ static int |
| tlc591xx_probe(struct i2c_client *client, |
| const struct i2c_device_id *id) |
| { |
| - struct device_node *np = dev_of_node(&client->dev), *child; |
| + struct device_node *np, *child; |
| struct device *dev = &client->dev; |
| const struct tlc591xx *tlc591xx; |
| struct tlc591xx_priv *priv; |
| int err, count, reg; |
| |
| - tlc591xx = device_get_match_data(dev); |
| + np = dev_of_node(dev); |
| if (!np) |
| return -ENODEV; |
| |
| + tlc591xx = device_get_match_data(dev); |
| + if (!tlc591xx) |
| + return -ENODEV; |
| + |
| count = of_get_available_child_count(np); |
| if (!count || count > tlc591xx->max_leds) |
| return -EINVAL; |
| -- |
| 2.30.2 |
| |