diff mbox series

power: supply: bq256xx: fix some problem in bq256xx_hw_init

Message ID 20231116041822.1378758-1-suhui@nfschina.com
State Accepted
Commit b55d073e6501dc6077edaa945a6dad8ac5c8bbab
Headers show
Series power: supply: bq256xx: fix some problem in bq256xx_hw_init | expand

Commit Message

Su Hui Nov. 16, 2023, 4:18 a.m. UTC
smatch complains that there is a buffer overflow and clang complains
'ret' is never read.

Smatch error:
drivers/power/supply/bq256xx_charger.c:1578 bq256xx_hw_init() error:
buffer overflow 'bq256xx_watchdog_time' 4 <= 4

Clang static checker:
Value stored to 'ret' is never read.

Add check for buffer overflow and error code from regmap_update_bits().

Fixes: 32e4978bb920 ("power: supply: bq256xx: Introduce the BQ256XX charger driver")
Signed-off-by: Su Hui <suhui@nfschina.com>
---
 drivers/power/supply/bq256xx_charger.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Sebastian Reichel Nov. 16, 2023, 7:27 p.m. UTC | #1
On Thu, 16 Nov 2023 12:18:23 +0800, Su Hui wrote:
> smatch complains that there is a buffer overflow and clang complains
> 'ret' is never read.
> 
> Smatch error:
> drivers/power/supply/bq256xx_charger.c:1578 bq256xx_hw_init() error:
> buffer overflow 'bq256xx_watchdog_time' 4 <= 4
> 
> [...]

Applied, thanks!

[1/1] power: supply: bq256xx: fix some problem in bq256xx_hw_init
      commit: b55d073e6501dc6077edaa945a6dad8ac5c8bbab

Best regards,
diff mbox series

Patch

diff --git a/drivers/power/supply/bq256xx_charger.c b/drivers/power/supply/bq256xx_charger.c
index 789a31bd70c3..1a935bc88510 100644
--- a/drivers/power/supply/bq256xx_charger.c
+++ b/drivers/power/supply/bq256xx_charger.c
@@ -1574,13 +1574,16 @@  static int bq256xx_hw_init(struct bq256xx_device *bq)
 			wd_reg_val = i;
 			break;
 		}
-		if (bq->watchdog_timer > bq256xx_watchdog_time[i] &&
+		if (i + 1 < BQ256XX_NUM_WD_VAL &&
+		    bq->watchdog_timer > bq256xx_watchdog_time[i] &&
 		    bq->watchdog_timer < bq256xx_watchdog_time[i + 1])
 			wd_reg_val = i;
 	}
 	ret = regmap_update_bits(bq->regmap, BQ256XX_CHARGER_CONTROL_1,
 				 BQ256XX_WATCHDOG_MASK, wd_reg_val <<
 						BQ256XX_WDT_BIT_SHIFT);
+	if (ret)
+		return ret;
 
 	ret = power_supply_get_battery_info(bq->charger, &bat_info);
 	if (ret == -ENOMEM)