]> git.baikalelectronics.ru Git - kernel.git/commit
power: supply: core: Fix boundary conditions in interpolation
authorDorian Rudolph <mail@dorianrudolph.com>
Sat, 14 May 2022 15:23:40 +0000 (17:23 +0200)
committerSebastian Reichel <sre@kernel.org>
Thu, 9 Jun 2022 19:08:38 +0000 (21:08 +0200)
commitbe2a9264fd26ac884248576d57a422b17d8505c7
tree7f1611046063d6f1d356acbd5200681e15851c1f
parent0cfc2184e51339af09809bdf7cbbbcdcee1e49c2
power: supply: core: Fix boundary conditions in interpolation

The functions power_supply_temp2resist_simple and power_supply_ocv2cap_simple
handle boundary conditions incorrectly.
The change was introduced in eefd418eeb60c63dad92e9be88d5c931ab391236
("power: supply: core: Use library interpolation").
There are two issues: First, the lines "high = i - 1" and "high = i" in ocv2cap
have the wrong order compared to temp2resist. As a consequence, ocv2cap
sets high=-1 if ocv>table[0].ocv, which causes an out-of-bounds read.
Second, the logic of temp2resist is also not correct.
Consider the case table[] = {{20, 100}, {10, 80}, {0, 60}}.
For temp=5, we expect a resistance of 70% by interpolation.
However, temp2resist sets high=low=2 and returns 60.

Cc: stable@vger.kernel.org
Signed-off-by: Dorian Rudolph <mail@dorianrudolph.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Fixes: eefd418eeb60 ("power: supply: core: Use library interpolation")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/power_supply_core.c