Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0eaf437a authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Sebastian Reichel
Browse files

power: bq2415x_charger: Properly handle ENODEV from power_supply_get_by_phandle



The power_supply_get_by_phandle() on error returns ENODEV or NULL.
The driver later expects obtained pointer to power supply to be
valid or NULL. If it is not NULL then it dereferences it in
bq2415x_notifier_call() which would lead to dereferencing ENODEV-value
pointer.

Properly handle the power_supply_get_by_phandle() error case by
replacing error value with NULL. This indicates that usb charger
detection won't be used.

Fix also memory leak of 'name' if power_supply_get_by_phandle() fails
with NULL and probe should defer.

Signed-off-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
Fixes: faffd234 ("bq2415x_charger: Add DT support")
Cc: <stable@vger.kernel.org>
[small fix regarding the missing ti,usb-charger-detection info message]
Signed-off-by: default avatarSebastian Reichel <sre@kernel.org>
parent 8000ebf7
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -1579,8 +1579,15 @@ static int bq2415x_probe(struct i2c_client *client,
	if (np) {
		bq->notify_psy = power_supply_get_by_phandle(np, "ti,usb-charger-detection");

		if (!bq->notify_psy)
			return -EPROBE_DEFER;
		if (IS_ERR(bq->notify_psy)) {
			dev_info(&client->dev,
				"no 'ti,usb-charger-detection' property (err=%ld)\n",
				PTR_ERR(bq->notify_psy));
			bq->notify_psy = NULL;
		} else if (!bq->notify_psy) {
			ret = -EPROBE_DEFER;
			goto error_2;
		}
	}
	else if (pdata->notify_device)
		bq->notify_psy = power_supply_get_by_name(pdata->notify_device);