nvmem: core: Fix device reference leak
authorAlban Bedel <albeu@free.fr>
Mon, 28 Jan 2019 15:55:05 +0000 (15:55 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 31 Jan 2019 15:24:15 +0000 (16:24 +0100)
__nvmem_device_get() make use of bus_find_device() to get the relevant
device and this function increase the reference count of the device
found, however this is not accounted for anywhere. Fix
__nvmem_device_get() and __nvmem_device_put() to properly release this
reference count.

Signed-off-by: Alban Bedel <albeu@free.fr>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvmem/core.c

index 1752768..5400017 100644 (file)
@@ -811,6 +811,7 @@ static struct nvmem_device *__nvmem_device_get(struct device_node *np,
                        "could not increase module refcount for cell %s\n",
                        nvmem_dev_name(nvmem));
 
+               put_device(&nvmem->dev);
                return ERR_PTR(-EINVAL);
        }
 
@@ -821,6 +822,7 @@ static struct nvmem_device *__nvmem_device_get(struct device_node *np,
 
 static void __nvmem_device_put(struct nvmem_device *nvmem)
 {
+       put_device(&nvmem->dev);
        module_put(nvmem->owner);
        kref_put(&nvmem->refcnt, nvmem_device_release);
 }