From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wolfram Sang Subject: [RFC PATCH] i2c: acpi: put device when verifying client fails Date: Thu, 12 Mar 2020 14:32:44 +0100 Message-ID: <20200312133244.9564-1-wsa@the-dreams.de> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: Sender: linux-acpi-owner@vger.kernel.org To: linux-i2c@vger.kernel.org Cc: linux-acpi@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Mika Westerberg , Andy Shevchenko , Jarkko Nikula , Wolfram Sang , Geert Uytterhoeven List-Id: linux-i2c@vger.kernel.org From: Wolfram Sang 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 Signed-off-by: Wolfram Sang --- RFC because I don't know if it can be that the returned dev is not an i2c_client. Yet, since it can happen theoretically, I think we should have the checks. drivers/i2c/i2c-core-acpi.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c index 8f3dbc97a057..8b0ff780919b 100644 --- a/drivers/i2c/i2c-core-acpi.c +++ b/drivers/i2c/i2c-core-acpi.c @@ -394,9 +394,17 @@ EXPORT_SYMBOL_GPL(i2c_acpi_find_adapter_by_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_by_acpi_dev(&i2c_bus_type, adev); - 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.20.1