Commit 6c59a17b authored by Dan Murphy's avatar Dan Murphy Committed by Sebastian Reichel

power: supply: bq25980: Fix uninitialized wd_reg_val and overrun

Fix the issue when 'i' is equal to array size then array index over
runs the array when checking for the watch dog value.

Fixes: 5069185f ("power: supply: bq25980: Add support for the BQ259xx family")
Signed-off-by: default avatarDan Murphy <dmurphy@ti.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 58d1620c
...@@ -1096,28 +1096,29 @@ static int bq25980_power_supply_init(struct bq25980_device *bq, ...@@ -1096,28 +1096,29 @@ static int bq25980_power_supply_init(struct bq25980_device *bq,
static int bq25980_hw_init(struct bq25980_device *bq) static int bq25980_hw_init(struct bq25980_device *bq)
{ {
struct power_supply_battery_info bat_info = { }; struct power_supply_battery_info bat_info = { };
int wd_reg_val = 0; int wd_reg_val = BQ25980_WATCHDOG_DIS;
int wd_max_val = BQ25980_NUM_WD_VAL - 1;
int ret = 0; int ret = 0;
int curr_val; int curr_val;
int volt_val; int volt_val;
int i; int i;
if (!bq->watchdog_timer) { if (bq->watchdog_timer) {
ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3, if (bq->watchdog_timer >= bq25980_watchdog_time[wd_max_val])
BQ25980_WATCHDOG_DIS, wd_reg_val = wd_max_val;
BQ25980_WATCHDOG_DIS); else {
} else { for (i = 0; i < wd_max_val; i++) {
for (i = 0; i < BQ25980_NUM_WD_VAL; i++) {
if (bq->watchdog_timer > bq25980_watchdog_time[i] && if (bq->watchdog_timer > bq25980_watchdog_time[i] &&
bq->watchdog_timer < bq25980_watchdog_time[i + 1]) { bq->watchdog_timer < bq25980_watchdog_time[i + 1]) {
wd_reg_val = i; wd_reg_val = i;
break; break;
} }
} }
}
}
ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3, ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3,
BQ25980_WATCHDOG_MASK, wd_reg_val); BQ25980_WATCHDOG_MASK, wd_reg_val);
}
if (ret) if (ret)
return ret; return ret;
......
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