| From ec275a4997f7cde351bad4c55e6b7fcf41a5e995 Mon Sep 17 00:00:00 2001 |
| From: Wolfram Sang <wsa+renesas@sang-engineering.com> |
| Date: Thu, 12 Mar 2020 14:32:44 +0100 |
| Subject: [PATCH] i2c: acpi: put device when verifying client fails |
| |
| commit 8daee952b4389729358665fb91949460641659d4 upstream. |
| |
| i2c_verify_client() can fail, so we need to put the device when that |
| happens. |
| |
| Fixes: 525e6fabeae2 ("i2c / ACPI: add support for ACPI reconfigure notifications") |
| Reported-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> |
| Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Signed-off-by: Wolfram Sang <wsa@the-dreams.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c |
| index 9a3bcfcad35f..ac5150ee0803 100644 |
| --- a/drivers/i2c/i2c-core-acpi.c |
| +++ b/drivers/i2c/i2c-core-acpi.c |
| @@ -371,10 +371,18 @@ static struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle) |
| static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev) |
| { |
| struct device *dev; |
| + struct i2c_client *client; |
| |
| dev = bus_find_device(&i2c_bus_type, NULL, adev, |
| i2c_acpi_find_match_device); |
| - return dev ? i2c_verify_client(dev) : NULL; |
| + if (!dev) |
| + return NULL; |
| + |
| + client = i2c_verify_client(dev); |
| + if (!client) |
| + put_device(dev); |
| + |
| + return client; |
| } |
| |
| static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value, |
| -- |
| 2.7.4 |
| |