diff mbox series

power: supply: gpio-charger: Fix set charge current limits

Message ID 20241209-fix-charge-current-limit-v1-1-760d9b8f2af3@liebherr.com (mailing list archive)
State Handled Elsewhere, archived
Headers show
Series power: supply: gpio-charger: Fix set charge current limits | expand

Commit Message

Dimitri Fedrau via B4 Relay Dec. 9, 2024, 10:46 a.m. UTC
From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>

Fix set charge current limits for devices which allow to set the lowest
charge current limit to be greater zero. If requested charge current limit
is below lowest limit, the index equals current_limit_map_size which leads
to accessing memory beyond allocated memory.

Fixes: be2919d8355e ("power: supply: gpio-charger: add charge-current-limit feature")
Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
 drivers/power/supply/gpio-charger.c | 8 ++++++++
 1 file changed, 8 insertions(+)


---
base-commit: 88e4a7dc04b7828315292eb3acaa466c9c123d8b
change-id: 20241209-fix-charge-current-limit-a5e5bbafdf11

Best regards,

Comments

Sebastian Reichel Dec. 10, 2024, 1:54 a.m. UTC | #1
On Mon, 09 Dec 2024 11:46:15 +0100, Dimitri Fedrau wrote:
> Fix set charge current limits for devices which allow to set the lowest
> charge current limit to be greater zero. If requested charge current limit
> is below lowest limit, the index equals current_limit_map_size which leads
> to accessing memory beyond allocated memory.
> 
> 

Applied, thanks!

[1/1] power: supply: gpio-charger: Fix set charge current limits
      commit: afc6e39e824ad0e44b2af50a97885caec8d213d1

Best regards,
diff mbox series

Patch

diff --git a/drivers/power/supply/gpio-charger.c b/drivers/power/supply/gpio-charger.c
index 68212b39785beabfe5536a18fa15bc249f7b1eea..6139f736ecbe4ffc74848797a72095f4cadf3b62 100644
--- a/drivers/power/supply/gpio-charger.c
+++ b/drivers/power/supply/gpio-charger.c
@@ -67,6 +67,14 @@  static int set_charge_current_limit(struct gpio_charger *gpio_charger, int val)
 		if (gpio_charger->current_limit_map[i].limit_ua <= val)
 			break;
 	}
+
+	/*
+	 * If a valid charge current limit isn't found, default to smallest
+	 * current limitation for safety reasons.
+	 */
+	if (i >= gpio_charger->current_limit_map_size)
+		i = gpio_charger->current_limit_map_size - 1;
+
 	mapping = gpio_charger->current_limit_map[i];
 
 	for (i = 0; i < ndescs; i++) {