summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <k.kozlowski@samsung.com>2015-03-20 09:26:02 (GMT)
committerSebastian Reichel <sre@kernel.org>2015-03-20 11:46:04 (GMT)
commitc94a3d403299f64d2f91346ff64c4b95747c123c (patch)
tree427bc1796eced6e09db5914518dd13df5f996184 /drivers/power
parentd3a6097b25e09751cba787b33eba26ab4df86215 (diff)
downloadlinux-c94a3d403299f64d2f91346ff64c4b95747c123c.tar.xz
power_supply: 88pm860x_charger: Fix possible NULL pointer dereference and use of initialized variable
Do not put reference to power supply in early exit paths of pm860x_done_handler() because: 1. it is not yet initialized, 2. it is NULL. This fixes possible NULL pointer dereference and following build warning: drivers/power/88pm860x_charger.c: In function ‘pm860x_done_handler’: drivers/power/88pm860x_charger.c:516:18: warning: ‘psy’ may be used uninitialized in this function [-Wmaybe-uninitialized] Additionally this puts the power supply reference before unlocking mutex. This actually is not needed (there is no race here) but has logical sense and makes the exit paths cleaner. Reported-by: kbuild test robot <fengguang.wu@intel.com> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Signed-off-by: Sebastian Reichel <sre@kernel.org>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/88pm860x_charger.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/power/88pm860x_charger.c b/drivers/power/88pm860x_charger.c
index bf822aa..0e448c6 100644
--- a/drivers/power/88pm860x_charger.c
+++ b/drivers/power/88pm860x_charger.c
@@ -495,7 +495,7 @@ static irqreturn_t pm860x_done_handler(int irq, void *data)
ret = power_supply_get_property(psy, POWER_SUPPLY_PROP_VOLTAGE_NOW,
&val);
if (ret)
- goto out;
+ goto out_psy_put;
vbatt = val.intval / 1000;
/*
* CHG_DONE interrupt is faster than CHG_DET interrupt when
@@ -506,14 +506,15 @@ static irqreturn_t pm860x_done_handler(int irq, void *data)
*/
ret = pm860x_reg_read(info->i2c, PM8607_STATUS_2);
if (ret < 0)
- goto out;
+ goto out_psy_put;
if (vbatt > CHARGE_THRESHOLD && ret & STATUS2_CHG)
power_supply_set_property(psy, POWER_SUPPLY_PROP_CHARGE_FULL,
&val);
+out_psy_put:
+ power_supply_put(psy);
out:
mutex_unlock(&info->lock);
- power_supply_put(psy);
dev_dbg(info->dev, "%s, Allowed: %d\n", __func__, info->allowed);
set_charging_fsm(info);