Commit b55d073e authored by Su Hui's avatar Su Hui Committed by Sebastian Reichel

power: supply: bq256xx: fix some problem in bq256xx_hw_init

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: 32e4978b ("power: supply: bq256xx: Introduce the BQ256XX charger driver")
Signed-off-by: default avatarSu Hui <suhui@nfschina.com>
Link: https://lore.kernel.org/r/20231116041822.1378758-1-suhui@nfschina.comSigned-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 054eb237
...@@ -1574,13 +1574,16 @@ static int bq256xx_hw_init(struct bq256xx_device *bq) ...@@ -1574,13 +1574,16 @@ static int bq256xx_hw_init(struct bq256xx_device *bq)
wd_reg_val = i; wd_reg_val = i;
break; 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]) bq->watchdog_timer < bq256xx_watchdog_time[i + 1])
wd_reg_val = i; wd_reg_val = i;
} }
ret = regmap_update_bits(bq->regmap, BQ256XX_CHARGER_CONTROL_1, ret = regmap_update_bits(bq->regmap, BQ256XX_CHARGER_CONTROL_1,
BQ256XX_WATCHDOG_MASK, wd_reg_val << BQ256XX_WATCHDOG_MASK, wd_reg_val <<
BQ256XX_WDT_BIT_SHIFT); BQ256XX_WDT_BIT_SHIFT);
if (ret)
return ret;
ret = power_supply_get_battery_info(bq->charger, &bat_info); ret = power_supply_get_battery_info(bq->charger, &bat_info);
if (ret == -ENOMEM) if (ret == -ENOMEM)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment