[<prev] [next>] [day] [month] [year] [list]
Message-ID: <af1a1044-5f45-ecaf-244e-90650f17ff17@canonical.com>
Date: Tue, 6 Oct 2020 18:59:22 +0100
From: Colin Ian King <colin.king@...onical.com>
To: Dan Murphy <dmurphy@...com>, Sebastian Reichel <sre@...nel.org>
Cc: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: re: power: supply: bq25980: Add support for the BQ259xx family
Hi
Static analysis with Coverity has detected a potential out-of-bounds
read issue in the following commit:
commit 5069185fc18e810715a91d80fcd075e03add600c
Author: Dan Murphy <dmurphy@...com>
Date: Mon Aug 31 11:48:49 2020 -0500
power: supply: bq25980: Add support for the BQ259xx family
Analysis is as follows:
1099 static int bq25980_hw_init(struct bq25980_device *bq)
1100 {
1101 struct power_supply_battery_info bat_info = { };
1102 int wd_reg_val;
1103 int ret = 0;
1104 int curr_val;
1105 int volt_val;
1106 int i;
1107
1. Condition !bq->watchdog_timer, taking false branch.
1108 if (!bq->watchdog_timer) {
1109 ret = regmap_update_bits(bq->regmap,
BQ25980_CHRGR_CTRL_3,
1110 BQ25980_WATCHDOG_DIS,
1111 BQ25980_WATCHDOG_DIS);
1112 } else {
2. Condition i < 4, taking true branch.
6. Condition i < 4, taking true branch.
7. cond_at_most: Checking i < 4 implies that i may be up to 3 on the
true branch.
1113 for (i = 0; i < BQ25980_NUM_WD_VAL; i++) {
3. Condition bq->watchdog_timer > bq25980_watchdog_time[i], taking
true branch.
4. Condition bq->watchdog_timer < bq25980_watchdog_time[i + 1],
taking false branch.
8. Condition bq->watchdog_timer > bq25980_watchdog_time[i], taking
true branch.
Out-of-bounds read (OVERRUN)
9. overrun-local: Overrunning array bq25980_watchdog_time of 4
4-byte elements at element index 4 (byte offset 19) using index i + 1
(which evaluates to 4).
1114 if (bq->watchdog_timer >
bq25980_watchdog_time[i] &&
1115 bq->watchdog_timer <
bq25980_watchdog_time[i + 1]) {
1116 wd_reg_val = i;
1117 break;
1118 }
5. Jumping back to the beginning of the loop.
1119 }
Accessing bq25980_watchdog_time[i + 1] when i is 3 causes the
out-of-range read
Colin
Powered by blists - more mailing lists